考虑这行代码:
List<SIDB_TransactionInformation> transaction = SIDB.SIDB_TransactionInformations
.Where(k => k.iscurrent == true & k.objectid == SIDB.func_GetObjectID("dbo.SIDB_Module")).ToList();
List<SIDB_Module> module = SIDB.SIDB_Modules
.Where(k => k.moduleid == transaction
.Where(j => j.transactionid == k.moduleid)
.SingleOrDefault().transactionid).ToList();
我在不同的集合中有2个where方法的调用。首先,我通过iscurrent和objectid区分我的列表,然后我确实有其他方法调用where方法(对于SIDB_Modules)通过moduleid来区分列表,其中值在这里引用我之前列表的transactionid。现在我有一个错误消息,如 本地序列不能用于查询运算符的LINQ to SQL实现,除了Contains()运算符。
抱歉,我是lambda表达的新手。急需帮助答案 0 :(得分:1)
我认为这就是你要找的东西
List<SIDB_Module> module = SIDB
.SIDB_Modules
.Where(k => transaction.Any(j => j.transactionid == k.moduleid))
.ToList();
列出SIDB_Modules
,其中transactionid
等于moduleid
。 LINQ to Sql可能与Any有问题,我不记得,如果是的话你可以用这样的额外步骤重写它
var transactionIds = transaction.Select(j => j.transactionid);
List<SIDB_Module> module = SIDB
.SIDB_Modules
.Where(k => transactionIds.Contains(k.moduleid))
.ToList();
如果性能是一个问题,您可以考虑使用第二种方法并将transactionIds
放入实现ISet<T>
并且具有恒定时间查找的内容中。
答案 1 :(得分:0)
好吧,您似乎正在尝试在SIDB_TransactionInformations
和SIDB.SIDB_Modules
之间进行联接。如果是这样,请尝试
var objectID = SIDB.func_GetObjectID("dbo.SIDB_Module");
List<SIDB_Module> modules = (from module in SIDB.SIDB_Modules
join transaction in SIDB.SIDB_TransactionInformations on module.moduleid equals transaction.transactionid
where transaction.iscurrent && transaction.objectid == objectID
select module).ToList();