【问题标题】:Linq select with join带连接的 Linq 选择
【发布时间】:2015-08-08 00:25:17
【问题描述】:

我有一个基本的选择任务要执行

var query = db.Candidate.Where(.....

但我希望在另一个名为 Tag 的表上的位置

在 sql 中会是

select * from Candidate
join Tag on Tag.candidateId = Candidate.tagId and Tag.tagId = 7

从而获得所有标签为 7 的候选人

我正在尝试直接使用 Where 来执行此操作,这可能还是我需要使用 Linq to SQL。

【问题讨论】:

  • 直接不可能。您首先需要联接表,然后从该联接中获取数据。
  • 我不能做 db.Candidate.Where(w => w.Tag.SOMETHING
  • @CodeCaster - 对不起,如果我听起来不清楚,但我的意思与 Yuval 的回答相同。
  • @Harvey 当然,这是一种方法,但并非不可能。看我的回答。

标签: c# linq


【解决方案1】:

您可以在 LINQ 中使用 Join 来执行此操作:

var candidates = from candidate in db.Candidates
                 join on tag in db.Tags
                 where candidate.CandidateId == tag.TagId
                 select candidate

【讨论】:

    【解决方案2】:

    您没有显示关系,但必须可以执行以下操作:

    var query = db.Candidate
                  .Include(c => c.Tags)
                  .Where(c => c.Tags.Any(t => t.ID == 7))
    

    只需查询候选人,其中候选人的任何标签都带有您要查找的 ID。这将或多或少地写成您显示的 SQL。

    如果您启用了延迟加载,则可以省略 Include()

    【讨论】:

      【解决方案3】:

      尝试使用 .Join 进行操作,如下所示:-

      var query = db.Candidate.Join(db.Tags, r => r.tagId , p => p.tagId , (r,p) => new{r.Name});
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-27
        • 2020-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-02
        • 1970-01-01
        • 2022-01-13
        相关资源
        最近更新 更多