Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法翻译LINQ表达式_C#_Sql_Linq_.net Core - Fatal编程技术网

C# 无法翻译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

我写了以下LINQ表达式:

        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();