C# 无法翻译LINQ表达式
我写了以下LINQ表达式:C# 无法翻译LINQ表达式,c#,sql,linq,.net-core,C#,Sql,Linq,.net Core,我写了以下LINQ表达式: var data = await _context.Occurrence .Include(o => o.Expense) .Where(o => ((o.RepeatStart.Date - date.Date).TotalHours % o.RepeatInterval == 0) || o.RepeatYear == d
var data = await _context.Occurrence
.Include(o => o.Expense)
.Where(o =>
((o.RepeatStart.Date - date.Date).TotalHours % o.RepeatInterval == 0)
||
o.RepeatYear == date.Year || o.RepeatYear < 0
&&
o.RepeatMonth == date.Month || o.RepeatMonth < 0
&&
o.RepeatDay == date.Day || o.RepeatDay < 0
&&
o.RepeatWeek == ISOWeek.GetWeekOfYear(date) || o.RepeatWeek < 0
&&
o.RepeatWeekDay == (int)date.DayOfWeek || o.RepeatWeekDay < 0
&&
o.RepeatStart.Date <= date.Date
)
.Select(e => e.Expense)
.ToListAsync();
var data=wait\u context.Occurrence
.包括(o=>o.费用)
。其中(o=>
((o.RepeatStart.Date-Date.Date).TotalHours%o.RepeatInterval==0)
||
o、 RepeatYear==date.Year | o.RepeatYear<0
&&
o、 RepeatMonth==date.Month | o.RepeatMonth<0
&&
o、 RepeatDay==date.Day | o.RepeatDay<0
&&
o、 RepeatWeek==ISOWeek.GetWeekOfYear(日期)| | o.RepeatWeek<0
&&
o、 RepeatWeekDay==(int)date.DayOfWeek | | o.RepeatWeekDay<0
&&
o、 重复开始日期(如费用)
.ToListAsync();
我得到这个错误:
无法翻译。以可以翻译的形式重写查询,或者通过插入对AsEnumerable()的调用显式切换到客户端计算。
但是,我没有得到任何运行时或编译时错误。我做错了什么?您正在调用WHERE
子句中特定于C的功能。实体框架无法将其转换为纯SQL,并要求您使用AsEnumerable()
在应用程序中进行筛选,而不是尝试将其转换为SQL
您应该能够简单地开始工作,但必须遵守:
var data = await _context.Occurrence
.Include(o => o.Expense)
.AsEnumerable()
.Where(o =>
((o.RepeatStart.Date - date.Date).TotalHours % o.RepeatInterval == 0)
||
o.RepeatYear == date.Year || o.RepeatYear < 0
&&
o.RepeatMonth == date.Month || o.RepeatMonth < 0
&&
o.RepeatDay == date.Day || o.RepeatDay < 0
&&
o.RepeatWeek == ISOWeek.GetWeekOfYear(date) || o.RepeatWeek < 0
&&
o.RepeatWeekDay == (int)date.DayOfWeek || o.RepeatWeekDay < 0
&&
o.RepeatStart.Date <= date.Date
)
.Select(e => e.Expense)
.ToList();
谢谢,现在尝试此操作,但似乎
.ToListAsync()/wait
失败。需要使用.ToList()
并删除wait
。啊,是的。我的错。然而,这没什么好担心的。它是本地内存处理,速度很快。
var data = await _context.Occurrence
.Include(o => o.Expense)
.Where(o => /* SQL-friendly calls only */)
.AsEnumerable()
.Where(o => /* everything else */)
.Select(e => e.Expense)
.ToList();