我在这里看到了这个类似的问题,但无法弄清楚如何在笛卡尔积中使用包含所需的结果情况:
LINQ To SQL 异常:在查询运算符的 LINQ to SQL 实现中不能使用本地序列,但 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.Format("{0:00}a{1:00}b", i, j),
};
foreach (var t in test)
Console.Write("{0}, ", t.AB);
这很好用,我得到了这样的转储(注意,我想要笛卡尔积):
01a02b, 01a05b, 01a08b, 04a02b, 04a05b, 04a08b, 07a02b, 07a05b, 07a08b,
现在我真正想要的是根据我拥有的数据库表中的 ID 再次使用这个和笛卡尔积。但是,只要我再添加一个 from 子句,而不是引用对象,而是引用 SQL 表,我就会得到一个错误。因此,将上面的内容更改为类似这样,其中 db 被定义为新的 DataContext(即,派生自 System.Data.Linq.DataContext 的类):
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);
我得到的错误如下:
本地序列不能在查询运算符的 LINQ to SQL 实现中使用,但 Contains 运算符除外
它显然与不使用包含有关,但我不确定当我真的不想限制结果时如何使用包含 - 我想要笛卡尔产品适合我的情况。关于如何使用上面包含的任何想法,并且在加入数据库和本地序列时仍然产生笛卡尔积?