簡體   English   中英

實體框架核心

[英]Entity Framework Core Where All

我可以在EF.Net中做到這一點,但在EFCore中不行

List<string> keyList = string.IsNullOrEmpty(keywords) ? new List<string>() : keywords.Split(' ').ToList();

collections = await db.ProductCollections
    .Where(m => m.Children.Count == 0 && (!keyList.Any() ? true : keyList.All(x => m.Name.Contains(x))))
    .ToListAsync();

我把它改成:

collections = await db.ProductCollections
    .Where(m => m.Children.Count == 0 && (keyList.Count == 0 || keyList.All(x => m.Name.Contains(x))))
    .ToListAsync();

所以我想問題出在keyList.All()中。 如何在 EFCore 中實現這一點?

錯誤信息:

The LINQ expression 'DbSet().Where(p => DbSet().Where(p0 => EF.Property<Nullable>(p, "ID").= null && object:Equals( objA. (object)EF, Property<Nullable>(p, "ID"): objB.(object)EF,Property<Nullable>(p0."ParentId"))).Count() == 0 && False || __keyList_0.All(x => p.Name.Contains(x)))' 無法翻譯,要么以可翻譯的形式重寫查詢,要么通過插入對 'AsEnumerable'、'AsAsyncEnumerable'、'ToList' 的調用顯式切換到客戶端評估. 或“ToListAsync”。 有關詳細信息,請參閱https://go.microsoft.com/fwlink/?linkid=2101038

在執行之前基於鍵列表構建查詢的替代方法。

var keys = string.IsNullOrEmpty(keywords) ? Array.Empty<string>() : keywords.Split(' ');

var query = db.ProductCollections.Where(p => p.Children.Any() == false);
foreach (var key in keys)
{
     query = query.Where(p => p.Name.Contains(key));
}

var collections = await query.ToListAsync();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM