Linq:最佳重载匹配有一些无效参数

Linq: the best overloaded match has some invalid arguments

我对 sql 查询执行 linq 以获取列表:

var list1 = db.Table1.Where(a => a.item == "Widgets").ToList();

现在我想使用上面列表的结果从另一个 table 获取列表:

var list2 = db.Table2.Where(a => list1.Contains(a.GUID)).ToList();

到目前为止,这一切都按预期工作。

现在我想做一个查询,我在另一个数据库 table 中找到具有我的 list2

中的 GUID 的所有行
var list3 = db.MyTable.Where(a => list2.Contains(a.GUID)).ToList();

三个 table 中的数据类型都相同,所以我知道它们匹配。但我得到的最佳重载匹配有一些无效参数?

您在第三行中缺少 Where-子句:

var list3 = db.MyTable.Where(a => list2.Contains(a.GUID)).ToList();

编辑:好的,这只是一种类型,问题已编辑,请参阅下面的新答案。


查看您的例外情况

System.Collections.Generic.List.Contains(Test1.Data.M‌​odels.Table1)' has some invalid arguments

我们可以看到 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 因为您无法从源代码中提取变量的确切类型。如果您将 vars 数据类型更改为 "real" 数据类型,您可能会更容易解决问题。