是否可以将两个 IQueryable 添加在一起?

Mat*_*t W 4 generics collections iqueryable arraylist

我一直在 IQueryable<> (具有相同类型)上使用 Union 来尝试从两个集合中生成一个集合,但它不起作用。我相信我对 IQueryable 成员的理解有问题。

我以为我可以使用 union 方法来构建(在 foreach 中)一个 SQL 语句,该语句将执行如下操作:

SELECT * FROM MYTABLE WHERE FK = 1
UNION
SELECT * FROM MYTABLE WHERE FK = 9
UNION
SELECT * FROM MYTABLE WHERE FK = 15
Run Code Online (Sandbox Code Playgroud)

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

Jam*_*ran 5

实际上,这完全按预期工作:

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);
Run Code Online (Sandbox Code Playgroud)

(我正在使用 Northwind 数据库)。它生成一个 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);
    }
}
Run Code Online (Sandbox Code Playgroud)