LINQ:在运行时构建where子句以包含ORs(| |)?
我需要在运行时构建where子句,但我需要使用where子句执行OR。这可能吗。。让我解释一下 这里我的代码…,基本上“filter”是一个按位枚举,因此filter可以等于下面的1个以上。。因此我需要建立where子句 如果我单独执行where,而不是想象如果我先执行未测试的,它会返回0条记录,这意味着我不能在测试的上执行where,因为它现在是0条记录 我将在下面放置一些psuedo代码:-) 这可能吗 我不想包含太多的“如果”,因为有太多的共同点,即没有过滤器,过滤器=仅测试,过滤器=未测试和测试。。。还有更多 有什么好主意吗 如果您有以下信息,请向我们致谢:LINQ:在运行时构建where子句以包含ORs(| |)?,linq,linq-to-sql,dynamic-linq,Linq,Linq To Sql,Dynamic Linq,我需要在运行时构建where子句,但我需要使用where子句执行OR。这可能吗。。让我解释一下 这里我的代码…,基本上“filter”是一个按位枚举,因此filter可以等于下面的1个以上。。因此我需要建立where子句 如果我单独执行where,而不是想象如果我先执行未测试的,它会返回0条记录,这意味着我不能在测试的上执行where,因为它现在是0条记录 我将在下面放置一些psuedo代码:-) 这可能吗 我不想包含太多的“如果”,因为有太多的共同点,即没有过滤器,过滤器=仅测试,过滤器=未测
IEnumerable<MyType> res = from p in myquery select p;
var statustext=new List();//添加所需的状态文本
dataApplication.Where(项=>
StatusText.Any(状态=>item.status==status))
使用HashSet表示状态,则.Contains
将是O(1),而不是列表中通常的O(n):
var statuses=newhashset(){“a”、“b”、“c”};
变量列表=新[]{
新的{Id=1,status=“a”},
新的{Id=2,status=“b”},
新建{Id=3,status=“z”}
};
var filtered=list.Where(l=>statuses.Contains(s=>l.status==s));
作为旁注,我不确定这是否适用于NHibernate的EF或Linq(或通常适用于IQueryable)。如果您没有一个“固定”的MyType(因为您正在生成一个匿名类型,执行一个selectnew{}),那么仍然可以使用一个技巧。如果你需要它,你可以问。@xanatos-你的“把戏”会非常有用。。。非常感谢大家对我的见解!
IEnumerable<MyType> res = from p in myquery select p;
var conditions = new List<Func<MyType, bool>>();
conditions.Add(p => p.PropertyOne == 1);
conditions.Add(p => p.PropertyTwo == 2);
res = res.Where(p => conditions.Any(q => q(p)));
static List<Func<T, bool>> MakeList<T>(IEnumerable<T> elements)
{
return new List<Func<T, bool>>();
}
var res = from p in elements select new { Id = p.Id, Val = p.Value };
var conditions = MakeList(res);
var statusTexts = new List<string>(); // Add desired status texts
dataApplication.Where(item =>
statusTexts.Any(status => item.Status == status))
var statuses = new HashSet<string>() {"a", "b", "c"};
var list = new[] {
new { Id = 1, status = "a"},
new { Id = 2, status = "b"},
new { Id = 3, status = "z"}
};
var filtered = list.Where(l => statuses.Contains(s => l.status == s));