我正在尝试使用附加搜索条件扩展我的 linq 查询,以通过发送 List<Listitem>
来过滤数据。到函数进行处理。该列表可以包含 1 个或多个项目,目标是检索符合任何条件的所有项目。
由于我向该函数发送多个搜索条件,因此发送到过滤器的信息越多,过滤结果就越准确。如果一个或多个条件为空,则过滤器将得到不太准确的结果。
每次执行以下代码时都会引发异常,并且我无法弄清楚如何解决使用语句以包含List<ListItem>
。提前感谢所有帮助!
异常:Unable to create a constant value of type 'System.Web.UI.WebControls.ListItem'. Only primitive types or enumeration types are supported in this context.
using (var db = new DL.ENTS())
{
List<DL.PRODUCTS> products =
(from a in db.PRODUCTS
where (description == null || description == "" ||
a.DESCRIPTION.Contains(description)) &&
(active == null || active == "" || a.ACTIVE.Equals(active, StringComparison.CurrentCultureIgnoreCase)) &&
(mID == null || mID == "" || a.MEDIA_ID == mID) &&
(mID == null || objTypes.Any(s => s.Value == a.OBJECTS)) //Exception here!
select a).ToList<DL.PRODUCTS>();
return products;
}
最佳答案
将原始值集合传递给表达式:
using (var db = new DL.ENTS())
{
var values = objTypes.Select(s => s.Value).ToArray();
List<DL.PRODUCTS> products =
(from a in db.PRODUCTS
where (description == null || description == "" || a.DESCRIPTION.Contains(description)) &&
(active == null || active == "" || a.ACTIVE.Equals(active, StringComparison.CurrentCultureIgnoreCase)) &&
(mID == null || mID == "" || a.MEDIA_ID == mID) &&
(mID == null || values.Contains(a.OBJECTS))
select a).ToList<DL.PRODUCTS>();
return products;
}
这将生成 SQL IN 子句。
注意 - 您可以使用 lambda 语法根据某些条件添加过滤器来组成查询:
var products = db.PRODUCTS;
if (!String.IsNullOrEmpty(description))
products = products.Where(p => p.DESCRIPTION.Contains(description));
if (!String.IsNullOrEmpty(active))
products = products.Where(p => p.ACTIVE.Equals(active, StringComparison.CurrentCultureIgnoreCase)));
if (!String.IsNullOrEmpty(mID))
products = products.Where(p => p.MEDIA_ID == mID);
if (mID != null)
products = products.Where(p => values.Contains(p.OBJECTS));
return products.ToList();
关于c# - 使用 Linq 按 List<ListItem> 进行过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23387415/