【问题标题】:Querying using Lambda Expression for exists within a list使用 Lambda 表达式查询是否存在于列表中
【发布时间】:2017-07-12 09:26:34
【问题描述】:

在我的项目中,我需要返回与数组中提供的模型 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 的所有数据?

谢谢

【问题讨论】:

  • 尝试使用query.Where(x =&gt; x.CarMoreInfoTable.CarModelTable.Any(f =&gt; !IdList.Contains(f.ModelId))),使用内部Where()的竞争点使用用法
  • 如果我理解正确,你能做到f =&gt; !IdList.Contains(f.ModelId)吗?
  • 只是注意到您在注释中放置了一条错误消息,位于视线之外的行尾。将这条消息放在帖子的正文中可能会更好,这样就可以在没有滚动条的情况下看到它。
  • 您能描述一下关系的基数吗?

标签: c# linq


【解决方案1】:

您有一个错误,因为第二个“Where”是这里的问题,第一个 Where 期望委托方法返回 bool 而不是 IEnumerable。 (评论编辑)我认为你必须否定:

IdList.Contains(f.ModelId)

编辑

如果您需要 Car Data(我假设它在 CarModel 类中),那么您需要先更改 Where to SelectMany(我们希望将许多集合合并为一个)并否定内部表达式(包含包含)。

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

【讨论】:

  • 不会省略所有CarModelTable 项目,即使其中只有一个在IdList 中
  • @DaveBecker 我编辑了我的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-25
  • 2010-12-10
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多