Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LINQ:在运行时构建where子句以包含ORs(| |)?_Linq_Linq To Sql_Dynamic Linq - Fatal编程技术网

LINQ:在运行时构建where子句以包含ORs(| |)?

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代码:-) 这可能吗 我不想包含太多的“如果”,因为有太多的共同点,即没有过滤器,过滤器=仅测试,过滤器=未测

我需要在运行时构建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));