我有一个LINQ语句,我需要做一个“包含”,但也需要某种循环。
数据格式如下:
x.Product_Name = "product[x], product[y], product[z]"
当用户从列表中选择多个项目进行搜索时。
我需要在Product_Name
内找到从用户中选择的任何内容。
var names = JsonConvert.DeserializeObject<IEnumerable<string>>
(criteria.value).ToArray();
此行获取用户从列表中选择的项目,并将它们存储在数组中。
query = query.Where(x => names.contains(x.Product_Name))
不起作用,因为Product_Name
是产品的扁平版本,所以我不能这样做。
我需要的是以下内容:
foreach (string s in names)
{
projectsQuery = projectsQuery.Where(x => x.Product_Name.Contains(s));
}
但是当为上面的内容创建SQL时,它使用AND
条件而不是OR
条件。我需要找到string s
中包含Product_Name
的任何实例。
答案 0 :(得分:0)
您可以通过手动创建表达式树来实现它。虽然管理代码很难。
var containsMethod = typeof(string).GetMethod("Contains", new[] { typeof(string) });
var xParameter = Expression.Parameter(typeof(x), "x");
var searchexpression = new stack<expression>();
foreach (string s in names)
{
var containsmethodexp = expression.call(Expression.Property(xParameter, "Product_Name", containsMethod, expression.constant(s));
if (searchexpression.count == 0)
{
searchexpression.push(containsmethodexp);
}
else
{
searchexpression.push(expression.orelse(containsmethodexp, searchexpression.pop()));
}
}
var finalResult = projectsQuery.Where(Expression.Lambda<Func<x, bool>>(searchexpression.pop(), new ParameterExpression[] { xParameter }));
此处x是您的实体名称