我需要在运行时构建where子句,但需要对where子句进行OR。这可能吗..让我解释一下..
在这里,我的代码...,基本上“过滤器”是一个枚举按位,因此过滤器可能等于以下项中的1。因此,我需要建立where子句...
如果我比想象中的我先执行未经测试的地方分开执行,并且返回0条记录,则意味着我无法在已测试的地方执行where,因为它现在有0条记录。
我将在下面放置一些伪代码:-)
string myWhere = "";
if ((filter & Filters.Tested) == Filters.Tested)
{
if (myWhere != "" ) myWhere =myWhere + "||";
myWhere = myWhere " Status == "Tested";
}
if ((filter & Filters.Untested) == Filters.Untested)
{
if (myWhere != "" ) myWhere =myWhere + "||";
myWhere = myWhere " Status == "Untested";
}
if ((filter & Filters.Failed) == Filters.Failed)
{
if (myWhere != "" ) myWhere =myWhere + "||";
myWhere = myWhere " Status == "Failed";
}
// dataApplications = a List of items that include Tested,Failed and Untested.
// dataApplciation.Where ( myWhere) --- Confused here!
这可能吗..
我不想包含很多“ IF”,因为有很多组合,即没有过滤器,filter =仅测试,filter =未经测试和测试...等等
任何想法真的很感激
谢谢
var statusTexts = new List<string>(); // Add desired status texts
dataApplication.Where(item =>
statusTexts.Any(status => item.Status == status))
如果您有这个:
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>>();
}
您可以通过传递LINQ查询的结果来调用它。所以
var res = from p in elements select new { Id = p.Id, Val = p.Value };
var conditions = MakeList(res);