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

Aja*_*ngh 2 c# linq entity-framework

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

return q.select(t=> new 
{
  date1,
  date2,
  Name,
  Status
});
Run Code Online (Sandbox Code Playgroud)

date1,date2 是数据库中的字符串字段,返回逗号分隔的日期。我只想从 date1 开始第一次约会。但无法得到它。有人可以帮我获得第一次约会吗?我尝试了一些类似的事情

date1 = date1.split(',')[0]; 
date1 = date1.split(',').take(0).firstOrDefault();
Run Code Online (Sandbox Code Playgroud)

但面对这个错误

LINQ to Entities 无法识别“System.String[] Split(Char[])”方法,并且此方法无法转换为存储表达式。

Ser*_*kiy 7

错误是非常不言自明的 - 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
  });
Run Code Online (Sandbox Code Playgroud)

第一条Select语句被翻译成 SQL 查询:

SELECT date1, date2, Name, Status FROM table
Run Code Online (Sandbox Code Playgroud)

如果您的表有很多字段,则保留它是有意义的,以避免通过网络传输所有这些字段。

接下来您将用于AsEnumerable()在内存中处理数据库查询结果。

第二条Select语句用于利用 C# 代码的所有功能将查询结果投影为您需要的内容,而无需转换为 SQL。