C# 如何在linq中获得数据库和局部序列之间的笛卡尔积?
我在这里看到了类似的问题,但不知道如何在笛卡尔积期望结果的情况下使用Contains: 假设我有以下几点:C# 如何在linq中获得数据库和局部序列之间的笛卡尔积?,c#,linq,linq-to-sql,linq-to-objects,cartesian-product,C#,Linq,Linq To Sql,Linq To Objects,Cartesian Product,我在这里看到了类似的问题,但不知道如何在笛卡尔积期望结果的情况下使用Contains: 假设我有以下几点: var a = new [] { 1, 4, 7 }; var b = new [] { 2, 5, 8 }; var test = from i in a from j in b select new { A = i, B = j, AB = string.For
var a = new [] { 1, 4, 7 };
var b = new [] { 2, 5, 8 };
var test =
from i in a
from j in b
select new {
A = i,
B = j,
AB = string.Format("{0:00}a{1:00}b", i, j),
};
foreach (var t in test)
Console.Write("{0}, ", t.AB);
这非常有效,我得到了这样的转储(注意,我想要笛卡尔积):
现在,我真正想要的是,根据我拥有的数据库表中的一个ID,再次获取这个和笛卡尔积。但是,只要我再添加一个from子句,它不是引用对象,而是引用SQL表,我就会得到一个错误。因此,将上面的内容更改为这样,其中db被定义为新的DataContext(即,从System.Data.Linq.DataContext派生的类):
我得到的错误如下所示:
本地序列不能用于查询运算符的LINQ到SQL实现中,但Contains运算符除外
它显然与不使用Contains有关,但我不确定当我真的不想限制结果时如何使用Contains——我希望笛卡尔积适合我的情况。关于如何使用上述内容并在加入数据库和本地序列时仍然产生笛卡尔乘积,您可以使用
ToList
或AsEnumerable
:
var test =
from symbol in db.Symbols.AsEnumerable()
from i in a
from j in b
select new {
A = i,
B = j,
AB = string.Format("{0}{1:00}a{2:00}b", symbol.ID, i, j),
};
抢手货.ToList()和.AsEnumerable()都工作得很好。ThanksaEnumerable更好,因为它将在结果出现时产生结果,而不是首先将它们全部提取到列表中
var a = new [] { 1, 4, 7 };
var b = new [] { 2, 5, 8 };
var test =
from symbol in db.Symbols
from i in a
from j in b
select new {
A = i,
B = j,
AB = string.Format("{0}{1:00}a{2:00}b", symbol.ID, i, j),
};
foreach (var t in test)
Console.Write("{0}, ", t.AB);
var test =
from symbol in db.Symbols.AsEnumerable()
from i in a
from j in b
select new {
A = i,
B = j,
AB = string.Format("{0}{1:00}a{2:00}b", symbol.ID, i, j),
};