【问题标题】:Join, group by and where with linq使用 linq 加入、分组和在哪里
【发布时间】:2013-12-12 19:09:13
【问题描述】:

我有三张桌子:

  • 请求(requestId、userId、languageId、text、timePosted)
  • RequestLanguages (requestId, languageId)
  • UserLanguages (userId, languageId) - 用户知道的所有语言

在 Requests 中 languageId 是提出请求的语言,但在 RequestLanguages 中 languageId 是用户想要翻译的语言。用户想要翻译的语言可能很少,而不仅仅是一种。

我需要在 Linq 中进行查询,在其中我将选择所有关于用户知道的语言的请求,这些请求想要翻译成用户也知道的语言(这需要是一个列表)。

我使用了 group by,但我并不擅长此操作。我不知道如何在 requestId 上加入 Requests 和 RequestLanguages 并将所有 languageId 用户想要翻译的内容存储到列表中!

我试过这样的:

using (var context = new WordsEntities())
        {
            List<short> languagesIKnow = (from ul in context.UserLanguages
                                          where ul.userId == userId
                                          select ul.languageId).ToList();

            var requests = (from rl in context.RequestLanguages
                            group rl.languageId by rl.requestId into p
                            select new
                            {
                                languageTold = p.ToList(),
                                reqId = p.Key
                            }
                            );
            List<ShowRequests> list = new List<ShowRequests>();
            foreach (var r in requests)
            {
                ShowRequests Req = from req in context.Requests
                          where req.requestId == r.reqId
                          && languagesIKnow.Exists(y => y == req.languageId)
                          && languagesIKnow.Intersect(r.languageTold).Any()
                          select new ShowRequests
                          {
                              languageAsk = req.languageId,
                              languageTold = r.languageTold,
                              userId = req.userId,
                              text = req.text,
                              picture = req.pictureExtension,
                              audio = req.audioExtension,
                              timePosted = req.timePosted
                          };
                list.Add(Req);



            }

但我不能将 Req 分配为类 ShowRequests..

【问题讨论】:

  • 一些示例数据(输入和输出)将有助于理解您的描述。
  • 这个老问题似乎被放弃了,下面的两个答案帖子几乎没有反馈。我认为现在可以将其关闭为“不清楚”。

标签: c# linq join group-by


【解决方案1】:

您可以像这样加入这两个表,然后在之后添加您的 where 子句。

var query = from request in Requests 
            join requestLanguage in RequestLanguages 
            on request.LanguageId equals requestLanguage.LanguageId

【讨论】:

    【解决方案2】:

    我认为这些简单的连接就是你所需要的

    var query = from request in db.Requests
                join requestLanguage in db.RequestLanguages
                  on request.requestId equals requestLanguage.requestId
                join userLanguage in db.UserLanguages
                  on requestLanguage.languageId equals userLanguage.languageId
                where request.requestId == requestId && userLanguage.userId == userId
                select request;
    

    【讨论】:

    • 我需要将 RequestLanguages 中的那些语言 ID 存储在一个列表中。
    猜你喜欢
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多