Linq-to-sql EF4 - 从生成列表

Posted

技术标签:

【中文标题】Linq-to-sql EF4 - 从生成列表【英文标题】:Linq-to-sql EF4 - Generate list from 【发布时间】:2011-06-21 05:38:19 【问题描述】:

我有以下 EF

Education 
long id,
string name,


User 
long id
string name
...


UserEducation

long userId,
long educationId,
long rank

我想要一个 linq-to-sql 调用,它会返回如下结果: 用户名 教育作为education1、education2、education3等的列表

我可以得到一个结果,其中包含用户使用的多个教育记录

from u in users where u.userIsSomething.Equals(true)
join d in usereducation on u.id equals d.userid
join e in education on d.educationId equals e.Id
select new UserEd() 
  UserName = u.Name,
  Education =  <--- I end up with several unique education entries, I want to flatten into a list

所以记录一下

Fred   AA in Culinary Arts
Fred   BS in Food Science
Fred   MBA

生成

弗雷德 烹饪艺术学士、食品科学学士、MBA

我意识到我可以简单地遍历记录,但我想把它放到一个语句中。

还没有找到类似的问题,非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

如果您使用的是 linq-to-sql 或实体框架,您应该具有导航属性,这样您的手动连接就变得多余了。如果您没有导航属性,那么您正在以错误的方式使用技术。重新定义您的模型以包含导航属性并尝试这个(未经测试):

var query = from u in context.Users where u.userIsSomething.Equals(true)
            select new UserEd 
                UserName = u.Name,
                Education = from ue in u.UserEducations
                            group ue by ue.Rank into grouped
                            select new RankedEd 
                                grouped.Key,
                                grouped.Select(g => g.Education.Name) 
                            
            );

【讨论】:

以上是关于Linq-to-sql EF4 - 从生成列表的主要内容,如果未能解决你的问题,请参考以下文章

Linq-to-SQL 数据检索速度比较

EF4 将 DynamicProxies 转换为基础对象

Linq-to-Sql:递归获取孩子

linq-to-sql 是不是处理动态查询?

如何在插入之前加快重复检查?

T-SQL IsNumeric()和Linq-to-SQL