我在这里看到了类似的问题,但无法理解如何在笛卡尔产品中使用contains所需的结果情况:
LINQ To SQL exception: Local sequence cannot be used in LINQ to SQL implementation of query operators except the Contains operator
假设我有以下几点:
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有关,但我不确定当我真的不想压缩结果时,如何使用contains-我想要笛卡尔积作为我的情况。在连接数据库和本地序列时,关于如何使用contains的任何想法都会产生笛卡尔积?