string.Join in Linq to Entity queries
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了string.Join in Linq to Entity queries相关的知识,希望对你有一定的参考价值。
我目前正在将我的数据访问代码从L2S转移到Entity框架db。我对以下查询有问题
var emps = (from emp in DataContext.setupEmployees
let contacts = DataContext.setupContacts.Where(x => x.EmployeeID == emp.EmployeeID).Select(x => x.Contact)
select new
{
EmployeeName = emp.EmployeeName,
Contacts = string.Join(", ", contacts.ToArray())
}).ToList();
EF告诉我它无法将方法string.join
转换为存储的表达式。一个显而易见的解决方法是将对象带入内存(ToList,AsEnumerable等),然后调用string.Join
方法
var emps = (from emp in DataContext.setupEmployees
let contacts = DataContext.setupContacts.Where(x => x.EmployeeID == emp.EmployeeID).Select(x => x.Contact)
select new
{
EmployeeName = emp.EmployeeName,
Contacts = contacts
}).ToList().Select(x=>new{
x.EmployeeName,
Contacts = string.Join(", ",x.Contacts)
});
这个解决方案完美无缺,但它只是更冗长,而且我必须在许多过去在L2S中正常工作的查询中复制select子句。
我的问题:有什么方法可以避免编写这个ToList
的东西,并在EF查询中调用string.Join
和类似的方法?
答案
我建议创建Contacts
作为IEnumerable<string>
数据类型而不是string
数据类型。您可以使用Contacts
生成任何您喜欢逗号分隔的输出等...
您可以将查询更改为如下所示:
var emps = (from emp in DataContext.setupEmployees
select new
{
EmployeeName = emp.EmployeeName,
Contacts = DataContext.setupContacts.Where(x => x.EmployeeID == emp.EmployeeID).Select(x => x.Contact)
}).ToList();
以上是关于string.Join in Linq to Entity queries的主要内容,如果未能解决你的问题,请参考以下文章
[Linq]使用EF To Linq执行类似sql的in语句
LINQ体验——LINQ to SQL语句之Group By/Having和Exists/In/Any/All/Contains