使用Lambda Expression查询是否存在于列表中

时间:2017-07-12 09:26:34

标签: c# linq

在我的项目中,我需要返回一个与模型ID'不匹配的汽车数据列表。在数组中提供。我不确定如何让我的查询工作。到目前为止,我有以下内容:

var IdList = new List<int> { 60,61,62, 63, 64, 65 };
var query = Context.ManufacturersTable.Where(m => m.Date == date && m.CountryToship = country && m.ExportOnly == false);
if(query.Count() > 0)
    query = query.Where(x => x.CarMoreInfoTable.CarModelTable.Where(f => IdList.Contains(f.ModelId))) //Cannot convert lambda expression to intended delegate type error here

return query

正如您在上面的查询中所看到的,我有3个表都相互链接。但是请一些人指导我如何查询不包含给定数组中Id的所有数据?

谢谢

1 个答案:

答案 0 :(得分:2)

您有错误,因为第二个&#39; Where&#39;这是问题,首先在哪里期望委托方法返回bool而不是IEnumerable。 (评论编辑)我认为你必须否定:

IdList.Contains(f.ModelId)

修改

如果您需要Car Data(我会假设它在CarModel类中),那么您需要首先更改SelectMany的位置(我们希望将多个集合合并为一个)并取消内部表达式(包含)。

var result = query
.SelectMany(x => x.CarMoreInfoTable.CarModelTable
                  .Where(f => !IdList.Contains(f.ModelId))).ToList();