我执行linq to sql查询以获取列表:
var list1 = db.Table1.Where(a => a.item == "Widgets").ToList();
现在我想使用上面列表的结果从另一个表中获取一个列表:
var list2 = db.Table2.Where(a => list1.Contains(a.GUID)).ToList();
到目前为止,这一切都按预期工作。
现在我想进行一个查询,在那里我发现另一个DB表中的所有行都有我的list2中的GUID
var list3 = db.MyTable.Where(a => list2.Contains(a.GUID)).ToList();
三个表中的数据类型都相同,所以我知道那些匹配。但是我得到了最好的重载匹配有一些无效的参数?
答案 0 :(得分:1)
您错过了第三行中的Where
- 条款:
var list3 = db.MyTable.Where(a => list2.Contains(a.GUID)).ToList();
编辑:好的,这只是一种类型而且问题已被编辑,请参阅下面的新答案。
查看您的例外情况
System.Collections.Generic.List.Contains(Test1.Data.M odels.Table1)'有一些无效的参数
我们可以看到list2的类型为List<Test1.Data.Models.Table1>
,但您尝试运行list2.Contains(long)
。你必须改变
var list2 = db.Table2.Where(a => list1.Contains(a.GUID)).ToList();
到
var list2 = db.Table2.Where(a => list1.Contains(a.GUID)).Select(a => a.GUID).ToList();
然后list2应该是List类型。
我个人不是var
的大个子,因为您无法从源代码中提取变量的确切类型。如果您将var
s 更改为“真实”数据类型,您可能会更容易发现问题。