C# 尝试使用LINQ在一系列类似SQL的语句上模拟SQL IN语句
我试图使用LINQ(C#)在一系列类似SQL的语句上模拟SQL IN语句。 我从一个名为Query的C# 尝试使用LINQ在一系列类似SQL的语句上模拟SQL IN语句,c#,sql,linq,union,concat,C#,Sql,Linq,Union,Concat,我试图使用LINQ(C#)在一系列类似SQL的语句上模拟SQL IN语句。 我从一个名为Query的IQueryable对象开始,该对象尚未被“过滤”。 我刚开始发布到堆栈溢出,所以请耐心等待我:) objectquerycontext=this.Context.users; IQueryable查询=(IQueryable)上下文; //创建完整列表的空白克隆(查询) var QueryFinal=Query.Where(i=>i.ID==0); foreach(userFilter.Name
IQueryable
对象开始,该对象尚未被“过滤”。
我刚开始发布到堆栈溢出,所以请耐心等待我:)
objectquerycontext=this.Context.users;
IQueryable查询=(IQueryable)上下文;
//创建完整列表的空白克隆(查询)
var QueryFinal=Query.Where(i=>i.ID==0);
foreach(userFilter.Name.Contains中的字符串项)
{
//根据完整列表(查询)返回应用于此项的所有记录,然后将结果附加到最终列表
QueryFinal=QueryFinal.Concat(Query.Where(i=>i.Name.Contains(Item));
}
返回QueryFinal.ToList();
我认为在每次迭代中,结果集都会在查询中返回。Where语句会被追加到QueryFinal列表中,它会这样做,但由于某种原因,在每次后续迭代中,它似乎会覆盖所有以前的记录,这些记录应该被“安全保存”在最终列表中。我也尝试过使用.Union,但仍然没有达到我所希望的效果。它似乎只返回最后一个结果集,而不是所有附加的结果集。有人发现我做错了什么吗?试试这个:
var query = this.Context.users.Where(u =>
userFilter.Name.Contains.Any(c => u.Name.Contains(c))
);
试试这个:
var query = this.Context.users.Where(u =>
userFilter.Name.Contains.Any(c => u.Name.Contains(c))
);
由于执行延迟,当调用
QueryFinal.ToList()时
,它将使用项的最后一个值
——在foreach
循环中执行此类查询时,这是一个非常常见的问题
在您的情况下,类似这样的内容可能会有所帮助:
foreach (String Item in userFilter.Name.Contains)
{
string currentItem = Item;
// based on the FULL list (Query) return all records that apply to this item & then append results to the final list
QueryFinal = QueryFinal.Concat(Query.Where(i => i.Name.Contains(currentItem)));
}
由于执行延迟,当调用
QueryFinal.ToList()时
,它将使用项的最后一个值
——在foreach
循环中执行此类查询时,这是一个非常常见的问题
在您的情况下,类似这样的内容可能会有所帮助:
foreach (String Item in userFilter.Name.Contains)
{
string currentItem = Item;
// based on the FULL list (Query) return all records that apply to this item & then append results to the final list
QueryFinal = QueryFinal.Concat(Query.Where(i => i.Name.Contains(currentItem)));
}
真是太棒了!事情总是简单的。非常感谢你!真是太棒了!事情总是简单的。非常感谢你!谢谢你的回复。我试过你的,但我一定没有正确地执行,因为它不起作用。幸运的是,NickW的回答对我来说很好。谢谢你的回答。我尝试了你的回答,但我一定没有正确地实施,因为它不起作用。幸运的是,NickW的回答对我来说很好。