【问题标题】:Linq where statement one to manyLinq where 声明一对多
【发布时间】:2014-03-11 16:12:22
【问题描述】:

表“aaa”有一个外键到表“bbb”的列,而外键又是表“ddd”。表“ddd”有一个 ID 名为“costRef”的列

我想选择那些具有我的任何“ddd”以及我的列表包含的特定 costRef 的那些“aaa”。

var query =
        from tr in db.aaa
        where tr.bbb.Any(x => x.ccc.ddd.Any(y => intList.Contains(y.costRef)))
        select tr;

在上述情况下,我得到了我所有的“aaa”,如果有的话。我可以理解,但这不是我想要的:) 但是我该如何做到这一点? 尝试使用 select 和 where 语句而不是我的“any”进行分配。可能这就是这样做的方法,但我无法管理它。

【问题讨论】:

  • 请将您的模型添加到您的问题中。我无法从您的代码中分辨出您拥有的属性类型。
  • 该查询完全提供了您所描述的内容。如果这不是您想要的,那么您需要解释它与您确实想要的有何不同。
  • 那你到底想要什么?
  • 您的查询中的ccc 是什么?
  • 在您的描述中,您介绍了表 aaa、bbb 和 ddd,但在您的代码示例中,您介绍了表 ccc。 ccc 与其他表的关系是什么?

标签: c# linq


【解决方案1】:

我在 Linq 出现之前就做过 SQL,所以我仍然倾向于遵循相同的结构。在这种情况下,您可以这样做:

var query = from a in db.aaa
join b in db.bbb on a.FK equals b.ID
join c in db.ccc on b.FK equals c.ID
where intList.Contains(c.costRef)
select a

【讨论】:

  • 这将是一个与 OP 的功能等效的查询,除了你的比他的更详细。
  • 基本上,是的,它是一样的(除了ccc干扰),但他的解决方案不起作用,所以那里一定有什么不正确的地方。此解决方案回答了这个问题:我想选择那些具有我的任何“ddd”的“aaa”以及我的列表包含的特定 costRef。
  • 所以您的查询与他的查询完全相同,并且他的查询不会返回他想要的内容。因此,您的查询也不会返回他想要的。稍微不同地编写相同的查询不会突然使它起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
  • 1970-01-01
  • 2020-09-14
  • 2023-03-31
  • 2014-01-19
  • 1970-01-01
相关资源
最近更新 更多