C# 尝试使用LINQ在一系列类似SQL的语句上模拟SQL IN语句

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

我试图使用LINQ(C#)在一系列类似SQL的语句上模拟SQL IN语句。 我从一个名为Query的
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的回答对我来说很好。