您好我在实体框架查询中有一个疑问。我从控制器中的一个操作返回此结果。
return q.select(t=> new
{
date1,
date2,
Name,
Status
});
date1,date2是数据库中返回逗号分隔日期的字符串字段。 我想从date1只拿第一个日期。但是无法得到它。 有人可以帮助我第一次约会。 我尝试过像
这样的事情date1 = date1.split(',')[0];
date1 = date1.split(',').take(0).firstOrDefault();
但面临此错误
LINQ to Entities无法识别方法' System.String [] 分裂(CHAR [])'方法,这个方法无法翻译成一个 商店表达。
答案 0 :(得分:1)
错误是非常自描述的 - EF无法创建将执行字符串拆分的SQL代码。您只能将数据下载到内存中,然后进行拆分:
q.Select(t=> new { // translated into SQL
t.date1,
t.date2,
t.Name,
t.Status
})
.AsEnumerable() // moves further execution into memory
.Select(x => new {
data1 = x.data1.Split(',')[0], // now you can use any c# code here
x.data2,
x.Name,
x.Status
});
第一个Select
语句被翻译成SQL查询:
SELECT date1, date2, Name, Status FROM table
如果您的表有很多字段以避免通过网络传输所有这些字段,那么保留它是有意义的。
接下来,使用AsEnumerable()
在内存中处理数据库查询结果。
第二个Select
语句用于将查询结果投射到您需要的所有C#代码中,而无需转换为SQL。