gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 10:10:59 24 4
gpt4 key购买 nike

我需要在运行时构建一个 where 子句,但我需要对 where 子句进行 OR。这可能吗?

这是我的代码。基本上“过滤器”是一个枚举按位,因此过滤器可能等于以下中的一个以上。因此我需要建立 where 子句。

如果我分别执行 WHERE,那么想象一下,如果我先执行 Untested,它会返回 0 条记录,这意味着我无法在 Tested 上执行 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.

// dataApplication.Where ( myWhere) --- Confused here!

这可能吗?

我不想包含很多“IF”,因为有很多组合,即没有过滤器、过滤器 = 仅测试、过滤器 = 未测试和测试......等等。

最佳答案

如果你有这个:

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);

关于LINQ:在运行时构建 where 子句以包含 OR( || )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5056616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com