C# 使用Where中的Contains作为列表
因此,我尝试从基于属性的集合中检索结果。我想得到任何在列表中保持该值的结果 这是我的密码 我试过使用dynamic linq。它不起作用了 这是动态林克。不起作用C# 使用Where中的Contains作为列表,c#,sql,linq,entity-framework-core,dynamic-linq,C#,Sql,Linq,Entity Framework Core,Dynamic Linq,因此,我尝试从基于属性的集合中检索结果。我想得到任何在列表中保持该值的结果 这是我的密码 我试过使用dynamic linq。它不起作用了 这是动态林克。不起作用 var list = new List<string>(2) { "11111", "22222" }; accounts = accounts.Where("@0.Contains(outerIt.PartnerCompanyId)", list); 我还希望SQL生成如下内容 WHERE PartnerCompa
var list = new List<string>(2) { "11111", "22222" };
accounts = accounts.Where("@0.Contains(outerIt.PartnerCompanyId)", list);
我还希望SQL生成如下内容
WHERE PartnerCompanyId IN (@gp1, @gp2, @gp3, …)
即使列表中有不止一个值,我也得到了这个结果。我希望参数列表中的元素数量相同
…WHERE PartnerCompanyId IN (@gp1)
有什么方法可以做到这一点吗?这是正确的方法:
var myaccounts = accounts.Where(a =>list.Contains(a.PartnerCompanyId));
您可以将其作为一个文本案例来运行,以显示它的工作情况。如果我正确理解了您的问题,您有一个帐户列表,您希望检查帐户是否包含“列表[0]或列表[1]或列表[2]” 我已经设法使用动态Linq实现了类似的功能 以您的代码为基础,以下是我为使查询正常工作所做的工作:
List<string> list = new List<string>(2) { "11111", "22222" };
string argumentString = "";
for (int i = 0; i < list.Length; i++)
{
argumentString = argumentString + "@" + i;
argumentString = argumentString + ".Contains(outerIt.PartnerCompanyId)";
if (i != (list.Length - 1))
{
argumentString = argumentString + " or ";
}
}
var accounts = accounts.Where(argumentString, list.ToArray());
循环将创建字符串:@0.ContainsouterIt.PartnerCompanyId或@1.ContainsouterIt.PartnerCompanyId
创建此字符串后,您只需要一个简单的Linq查询来检查列表中的所有项目
注意:可以通过和数组按顺序引用参数,但不能引用列表。如图所示
我希望这能有所帮助,我有一个类似的项目,我花了很长时间才弄明白。您可以直接使用,但请确保您搜索的值中的类型和类型相同
因此,只有当PartnerCompanyId也是字符串时,这才有效
var list=newlist2{1111122222};
账户Where@0.ContainsouterIt.PartnerCompanyId,名单
在LinqPad中测试这一点会显示您所期望的SQL:
-区域参数
声明@p0int=7065
声明@p1 Int=7066
-端区
从[MyTable]中选择[t0]。[Id],***作为[t0]
其中,@p0,@p1中的[t0].[Id]
accounts=accounts.Whereaccount=>list.Containsaccount.PartnerCompanyId;问题是我得到了这个…在gp1中PartnerCompanyId。我期望生成的更像这样…gp1、gp2中的PartnerCompanyId,…仅供参考,其中=>a.PartnerCompanyId.Containslist.Any.ToString将搜索任何包含子字符串true的PartnerCompanyId,因为list.Any.ToString将计算为true,因为list不是空的。搜索我找到的表达式树是否有帮助?什么版本的EF Core?
List<string> list = new List<string>(2) { "11111", "22222" };
string argumentString = "";
for (int i = 0; i < list.Length; i++)
{
argumentString = argumentString + "@" + i;
argumentString = argumentString + ".Contains(outerIt.PartnerCompanyId)";
if (i != (list.Length - 1))
{
argumentString = argumentString + " or ";
}
}
var accounts = accounts.Where(argumentString, list.ToArray());