Collections 可以把两个IQueryable加在一起吗?

Collections 可以把两个IQueryable加在一起吗?,collections,arraylist,generics,iqueryable,Collections,Arraylist,Generics,Iqueryable,我一直在使用相同类型的IQueryable上的Union来尝试从两个集合中生成一个集合,但它不起作用。我相信我的理解对那些有资格的成员是错误的 我想我可以使用union方法在foreach中构建一条SQL语句,该语句将执行如下操作: SELECT * FROM MYTABLE WHERE FK = 1 UNION SELECT * FROM MYTABLE WHERE FK = 9 UNION SELECT * FROM MYTABLE WHERE FK = 15 以前我认为一定有一种方法可以

我一直在使用相同类型的IQueryable上的Union来尝试从两个集合中生成一个集合,但它不起作用。我相信我的理解对那些有资格的成员是错误的

我想我可以使用union方法在foreach中构建一条SQL语句,该语句将执行如下操作:

SELECT * FROM MYTABLE WHERE FK = 1
UNION
SELECT * FROM MYTABLE WHERE FK = 9
UNION
SELECT * FROM MYTABLE WHERE FK = 15

以前我认为一定有一种方法可以在两个IQueryable上产生与以前最喜欢的ArrayList的AddRange相同的效果,这是我在这里尝试实现的基本功能。

我最终通过使用列表并简单地调用AddRange解决了这个问题。一旦列表完成,我就调用list.AsQueryable来取回IQueryable集合

这是最好的方法吗?
这将为列表中的每个添加项创建一个SQL调用-没有办法创建正确的UNION语句吗?

将是您想要的吗?

实际上,这完全符合预期:

var q1 = from c in db.Customers where c.CustomerID.StartsWith("A") select c;
var q2 = from c in db.Customers where c.CustomerID.StartsWith("B") select c;
var q3 = from c in db.Customers where c.CustomerID.StartsWith("C") select c;

var q4 = q1.Union(q2).Union(q3);
我正在使用北风数据库。它生成一条SQL语句,将三个查询合并在一起

更新:我想我误解了你所说的循环。这是正确的:

static void Main(string[] args)
{
    var db = new NorthwindDataContext();
    IQueryable<Customer> query = from c in db.Customers 
                                 where c.CustomerID.StartsWith("A") 
                                 select c;

    foreach (var ch in "EIOV")
    {
        var chh = ch.ToString();  // separate variable so closure work right

        query = query.Union(from c in db.Customers 
                            where c.CustomerID.StartsWith(chh) 
                            select c);
    }

    foreach (var c in query)
    {
        Console.WriteLine(c.CompanyName);
    }
}

您可以尝试以下方法:

var qry = 
new [] {
    "one", "two", "three", "four"
}
.Select(z=>MyTable.Where(x=>x.Number==z))
.Aggregate((a,x)=>a.Union(x))
.ToList();

这样做的目的是创建一个单独的IQueryable,然后可以具体化,请查看ToList以生成一个服务器端语句。

第4季度的foreachvar c应该可以工作,但如果不是第4季度的foreachvar c,ToList会工作。但它是否可以用于删除已知q1、q2、q4等数量的循环。如果qN是一个2000的循环呢?每次迭代似乎都会覆盖上一次迭代的LINQ语句,因为它们共享用于生成查询的var。@JamesCurran我发现了另一种情况:如果q1为空,那么q4为空,因为没有要联合的内容。我遇到了这个问题。请帮忙,谢谢。恐怕没什么不同。请提供一个例子,说明它在foreach中的用法?