C# 在对象集合的实体框架中拆分字符串,即在新{}
您好,我在实体框架查询中有一个疑问。我正在从控制器中的一个操作返回此结果C# 在对象集合的实体框架中拆分字符串,即在新{},c#,entity-framework,linq,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)
return q.select(t=> new
{
date1,
date2,
Name,
Status
});
date1、date2是数据库中返回逗号分隔日期的字符串字段。
我只想从date1开始第一次约会,但无法获得。
谁能帮我安排第一次约会吗。
我试过两种方法,比如
date1 = date1.split(',')[0];
date1 = date1.split(',').take(0).firstOrDefault();
但是面对这个错误
LINQ to实体无法识别方法“System.String[]
Split(Char[])方法,此方法无法转换为
存储表达式
错误是非常自描述性的-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
语句用于将查询结果投影到您需要的东西中,而无需将其转换为SQL。在使用C方法(如Split
)之前,您需要使用AsEnumerable
或ToList
将查询带到内存中。如果数据量很大,最好从数据库本身返回所需的数据。另外,存储这样的日期意味着您的数据库模式有一个大问题。每列都应该是离散的,并且具有适当的数据类型。@TimSchmelter true:)