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

时间:2016-01-23 16:22:09

标签: linq linq-to-sql

我执行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();

三个表中的数据类型都相同,所以我知道那些匹配。但是我得到了最好的重载匹配有一些无效的参数?

1 个答案:

答案 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 更改为“真实”数据类型,您可能会更容易发现问题。