簡體   English   中英

按對象列表過濾 DbSet

[英]Filter DbSet by list of objects

我將 Entity Framework Core 與 SQL Server 一起使用,通過傳入的搜索對象列表過濾部門實體列表。 我想返回與任何一個搜索對象中的條件匹配的除法。 搜索對象類如下所示:

public class SearchObject
{
    public int DivisionId { get; set; }
    public int Status { get; set; }
}

這是我嘗試的查詢:

var searchObjects = new List<SearchObject> { ... };

 IQueryable<Product> query = myContext.Divisions.Where(div =>
     searchObjects.Any(searchObj =>  
            searchObj.Status == div.Status && 
            searchObj.DivisionId == div.DivisionId))
    .Select(...);

當 IQueryable 枚舉時,我收到一條錯誤消息:“Linq 表達式 DbSet ......無法翻譯......”我需要的是類似 .Contains() 的東西,但它適用於 SearchObj 列表。

那么你有正確的想法

我需要的是類似 .Contains() 的東西,但它適用於 SearchObj 列表。

這就是你的做法

var searchObjects = new List<SearchObject> { ... };
var searchIds = searchObjects.Select(x => x.Divisiond) //.ToList() perhaps?
var searchStatus = searchObjects.Select(x => x.Status) //.ToList() perhaps?
//not you can simply use .Contains and it should generate a WHERE EXISTS query

 IQueryable<Product> query = myContext.Divisions
          .Where(div =>
              searchIds.Contains(div.DivisionId) &&
              searchStatus.Contains(div.Status))
    .Select(...);

暫無
暫無

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

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