LINQ表达式来匹配多个批量投入

编程入门 行业动态 更新时间:2024-10-16 16:12:57
本文介绍了LINQ表达式来匹配多个批量投入的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我怎么能写一个LINQ表达式来匹配多个批量投入?

这是我的数据库表

会员部,系 1 3 4月9日* 5 1 6 3 * 9 2

我要选择成员标有*

下面是我输入

INT [] =师新INT [2] {4,6}; INT [] =部门新INT [2] {9,3};

下面是我试过

VAR selectedMembers = members.Where(成员=> divisions.Contains(member.Division)及和放大器; department.Contains(member.Department))。ToArray的();

这不正确的行为EF。它与一个单一的输入,但不能同时输入(司和处)应该返回对在输入如匹配时:

会员[] = selectedMembers新成员国[2] {新会员司{= 4,系= 9},新会员司{= 6系= 3}};

解决方案

此类型的过滤不直接由EF支持。

一个可能的解决方案是动态地建立这样一个判断:

成员=> (member.Division ==区划[0]&放大器;&放大器; member.Department ==部门[0]) || (member.Division ==区划[1]安培;&安培; member.Department ==部门[1])$ ​​B $ B ... || (member.Division ==区划[N-1]&放大器;&放大器; member.Department ==部门[N-1]);

下面是你如何做到这一点:

变量参数= Expression.Parameter(typeof运算(会员),会员); VAR谓词= Expression.Lambda< Func键<会员,布尔>>( Enumerable.Range(0,divisions.Length)。选择(I =>新建表达式[] { Expression.Equal(Expression.Property(参数司),Expression.Constant(师[I])), Expression.Equal(Expression.Property(参数处),Expression.Constant(部门由[i])),} .Aggregate(Expression.AndAlso)) .Aggregate(Expression.OrElse),参数); VAR的查询= members.Where(谓语);

How can I write a LINQ expression that will match multiple bulk inputs?

This is my database table

Members Division, Department 1 3 4 9 * 5 1 6 3 * 9 2

I want to select the members marked with a *

Here are my inputs

int[] divisions = new int[2] {4, 6}; int[] department = new int[2] {9, 3};

Here's the query I tried

var selectedMembers = members.Where(member => divisions.Contains(member.Division) && department.Contains(member.Department)).ToArray();

This does not behave correctly in EF. It works when with a single input but not both inputs (Division and Department) It should return pairs matching in the inputs eg:

Member[] selectedMembers = new Member[2] { new Member{Division=4,Department=9}, new Member{Division=6,Department=3}};

解决方案

This type of filtering is not supported directly by EF.

One possible solution is to build dynamically a predicate like this:

member => (member.Division == divisions[0] && member.Department == departments[0]) || (member.Division == divisions[1] && member.Department == departments[1]) ... || (member.Division == divisions[N-1] && member.Department == departments[N-1]);

Here is how you can do that:

var parameter = Expression.Parameter(typeof(Member), "member"); var predicate = Expression.Lambda<Func<Member, bool>>( Enumerable.Range(0, divisions.Length) .Select(i => new Expression[] { Expression.Equal(Expression.Property(parameter, "Division"), Expression.Constant(divisions[i])), Expression.Equal(Expression.Property(parameter, "Department"), Expression.Constant(departments[i])), } .Aggregate(Expression.AndAlso)) .Aggregate(Expression.OrElse), parameter); var query = members.Where(predicate);

更多推荐

LINQ表达式来匹配多个批量投入

本文发布于:2023-11-22 14:40:17,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1617844.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:多个   表达式   批量   LINQ

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!