我一直在 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
以前我认为必须有一种方法可以在两个 IQueryable 上产生与旧的最喜欢的 ArrayList 的 AddRange 相同的效果,这实际上是我在这里尝试实现的基础。
最佳答案
实际上,这完全按预期工作:
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);
(我正在使用 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);
}
}
关于collections - 是否可以将两个 IQueryable 添加在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3492412/