gpt4 book ai didi

c# - 从列表中按 ID 选择

转载 作者:太空宇宙 更新时间:2023-11-03 13:04:14 26 4
gpt4 key购买 nike

我有一个产品表和一个类别表,我可以通过 CategoryID 进行选择,如下所示:

var result = db.tblProducts.Where(p => p.tblCategories.Any(c => c.ID == 1));

但是,我希望能够根据类别列表进行选择:

 var catIDs = new List<int>() { 1,2,3 };

var results = db.tblProducts.Where(r => r.tblCategories.Any(t => catIDs.Contains(t.ID)));

我收到以下错误:

LINQ to Entities does not recognize the method 'Boolean Contains(Int32)' method, and this method cannot be translated into a store expression.

大概是因为我正在使用 Contains 将实体与局部变量进行比较。有办法做到这一点吗?

最佳答案

尝试从值创建 Expression。例如:

static Expression MakeOrExpression<T, P>(Expression<Func<T, P>> whatToCompare, IEnumerable<P> values)
{
Expression result = Expression.Constant(true);

foreach (var value in values)
{
var comparison = Expression.Equal(whatToCompare, Expression.Constant(value));
result = Expression.Or(result, comparison);
}

return result;
}

使用方法:

var results = db.tblProducts.Where(r => r.tblCategories.Any(MakeOrExpression(t => t.ID, catIDs)));

MakeOrExpression 方法将创建一个表达式 t.ID == 1 || t.ID == 2 || t.ID == 3 动态地获取列表 { 1, 2, 3 } ,然后 EF 会将其转换为 SQL 条件。

关于c# - 从列表中按 ID 选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31319957/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com