在对象集合中的实体框架中拆分字符串,即在新的{}中

时间:2017-03-14 14:03:36

标签: c# entity-framework linq

您好我在实体框架查询中有一个疑问。我从控制器中的一个操作返回此结果。

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 [])'方法,这个方法无法翻译成一个   商店表达。

1 个答案:

答案 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。