Linq - Expression.And 连接 N 个元素 BinayExpression

发布于 2024-11-30 06:53:05 字数 721 浏览 1 评论 0原文

我有一个 BinaryExpression 列表,我需要将该列表的元素加入到一个“对象”中。

IList<BinaryExpression> lstBin = new List<BinaryExpression>();

在我的列表中,我有这样的内容:

{(item.Field1 = 1)} //First Element
{(item.Field2 = 99)} //Second Element
//So on..

我需要这样的东西:

(item => item.Field1 == 1 && item.Field2 == 99 && item.Field3 == 45)

我知道 Linq 有 Expression.And,并且我需要制定一个逻辑来实现它,但我做不到。我试图在我的列表中创建一个循环,但是 Expression.And 需要两个表达式,而在我的循环中我只有一个。 之后,我将从这个单一的“对象”创建一个 Expression.Lamba,如下所示:

Expression<Func<T, bool>> expr = Expression.Lambda<Func<T, bool>>(singleExpression, parameter);

I have a list of BinaryExpression and I need to join the elements of this list in a single "object".

IList<BinaryExpression> lstBin = new List<BinaryExpression>();

Inside my List I have this:

{(item.Field1 = 1)} //First Element
{(item.Field2 = 99)} //Second Element
//So on..

I need something like this:

(item => item.Field1 == 1 && item.Field2 == 99 && item.Field3 == 45)

I know that Linq has Expression.And, and I need to make a logic to implement this, but I couldn't. I tried to make a loop inside my list but Expression.And needs two Expression, and inside my loop I have only one.
After this, I'll make a Expression.Lamba from this single "object", like this:

Expression<Func<T, bool>> expr = Expression.Lambda<Func<T, bool>>(singleExpression, parameter);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

五里雾 2024-12-07 06:53:05

我认为你想要(使用 LINQ):

var singleExpression = lstBin.Aggregate(Expression.AndAlso);

如果你更喜欢编写循环:

var singleExpression = lstBin.First();

foreach (var expr in lstBin.Skip(1))
    singleExpression = Expression.AndAlso(singleExpression, expr);

I think you want (with LINQ):

var singleExpression = lstBin.Aggregate(Expression.AndAlso);

If you prefer writing a loop:

var singleExpression = lstBin.First();

foreach (var expr in lstBin.Skip(1))
    singleExpression = Expression.AndAlso(singleExpression, expr);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文