![](/img/trans.png)
[英]Convert “The LINQ expression could not be translated” warning into an error
[英]LINQ expression error could not be translated
我在嘗試執行查詢時遇到此錯誤。
System.InvalidOperationException: .Where(ti => (int)ti.Inner.OptionType == 1 && ti.Inner.QualifierId == null && ti.Inner.CreditingMethod != "xxx" && __ToList_0 .Any(e => e .Vdate== (Nullable)ti.Outer.ADate))' 無法翻譯。 以可翻譯的形式重寫查詢,或通過插入對 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的調用顯式切換到客戶端評估。 有關詳細信息,請參閱https://go.microsoft.com/fwlink/?linkid=2101038 。
我填充的對象是
public class OCList
{
public DateTime? Vdate{ get; set; }
public Double? VWeight{ get; set; }
}
/// example of adding to the list
List<OCList> ocList= new List<OCList>();
if (request.Date1 != null && request.Weight1 != null)
{
ocList.Add(new OCList{ Vdate = request.Date1.Value, VWeight = request.Weight1.Value });
}
錯誤在這里:
&& ocList.ToList().Any(e => e.Vdate == x.Tb2.ADate))
林克表達式:
var results = _context.Tb1
.Join(_context.Tb2, oc => oc.OptionId, o => o.OptionId, (oc, o) => new { OptionCost = oc, Option = o })
.Where(x => x.Tb2.Val1 == 1
&& x.Tb2.Val2 == null
&& ocList.ToList().Any(e => e.Vdate == x.Tb2.ADate))
////.........
在此處檢查客戶端和服務器端評估: https : //docs.microsoft.com/en-us/ef/core/querying/client-eval
EF Core 支持頂級投影中的部分客戶端評估(本質上是對 Select() 的最后一次調用)。 如果查詢中的頂級投影無法轉換到服務器,EF Core 將從服務器獲取任何所需數據並在客戶端評估查詢的其余部分。 如果 EF Core 在頂級投影以外的任何位置檢測到無法轉換到服務器的表達式,則會引發運行時異常。
您的ToList
和Any
無法轉換為 sql,因此您會收到錯誤消息。
這會工作
var results = _context.Tb1
.Join(_context.Tb2, oc => oc.OptionId, o => o.OptionId, (oc, o) => new { OptionCost = oc, Option = o })
.AsEnumerable()
.Where(x => x.Tb2.Val1 == 1
&& x.Tb2.Val2 == null
&& ocList.ToList().Any(e => e.Vdate == x.Tb2.ADate))
但它會首先從服務器獲取所有內容,然后應用where
子句,從而導致性能不佳。
你可以像這樣讓它更好一點
var results = _context.Tb1
.Join(_context.Tb2, oc => oc.OptionId, o => o.OptionId, (oc, o) => new { OptionCost = oc, Option = o })
.Where(x => x.Tb2.Val1 == 1
&& x.Tb2.Val2 == null)
.AsEnumerable()
.Where(ocList.ToList().Any(e => e.Vdate == x.Tb2.ADate))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.