[英]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.