【问题标题】:Join clause incorrect on multiple join LINQ多个连接 LINQ 上的连接子句不正确
【发布时间】:2014-04-22 10:47:18
【问题描述】:

我有一个这样的多重连接查询:

public static List<Answer> GetDetailedAnswers(string Tag)
    {
        using (Database db = new Database())
        {

            List<Answer> answer = 
                         from quest in db.Question
                         join answ in db.Answer on quest.ID equals answ.QuestionID
                         join deal in db.Dealer on answ.DealerID equals deal.ID
                         join country in db.Country on deal.CountryID equals country.CountryID
                         where quest.ParentSection == Tag
                         select new 
                         { 
                                      ParentSection = quest.ParentSection, 
                                      Section = quest.Section, 
                                      Dealer = deal.Name, 
                                      OriginalAnswer = answ.Original,
                                      EngAnswer = answ.English,
                                      Region = country.Country
                         }.ToList();
            return answer;
        }
    }

我有一个这样的内部类:

public class Answer
    {
        public string ParentSection { get; set; }
        public string Section { get; set; }
        public string Dealer { get; set; }
        public string OriginalAnswer { get; set; }
        public string EngAnswer { get; set; }
        public string Region { get; set; }
    }

我在最后一次加入时遇到错误。它说“连接子句中的一个表达式的类型不正确。类型推断在调用'Join'时失败” 我错过了什么?谢谢

【问题讨论】:

  • 检查两者是否有相同的数据类型,可能一个是 int 第二个长这样
  • 我可能会问一个显而易见的问题,但是最后一个 join 中的字段的数据类型是什么?
  • 这是我怀疑的错误,但我不知道为什么。一个是uniqueID,另一个是Int。更改它问题已解决,但现在我收到此错误:“AnonymousType#1 不包含 'ToList' 的定义并且没有扩展方法 'ToList'”。我应该在答案类中创建和覆盖方法吗?

标签: c# linq join


【解决方案1】:

对于错误:“AnonymousType#1 不包含 'ToList' 的定义并且没有扩展方法 'ToList'”,您可以执行以下操作。

  public static List<Answer> GetDetailedAnswers(string Tag)
{
    using (Database db = new Database())
    {

        List<Answer> answer = 
                     (from quest in db.Question
                     join answ in db.Answer on quest.ID equals answ.QuestionID
                     join deal in db.Dealer on answ.DealerID equals deal.ID
                     join country in db.Country on deal.CountryID equals country.CountryID
                     where quest.ParentSection == Tag
                     select new Answer
                     { 
                                  ParentSection = quest.ParentSection, 
                                  Section = quest.Section, 
                                  Dealer = deal.Name, 
                                  OriginalAnswer = answ.Original,
                                  EngAnswer = answ.English,
                                  Region = country.Country
                     }).ToList();
        return answer;
    }
}

您需要将查询括在圆括号内,然后对其应用 .ToList() 方法。

【讨论】:

  • 它有效,但它说我无法将 List 转换为 List。我要弄清楚这一点。谢谢
  • 是的,因为您没有在选择中指定答案类。检查我的答案,我在其中添加了 Answer 类。如果你只用 new 编写 select,这意味着它是“AnonymousType”,所以它不能将它转换为 List。所以你需要指定类型。
  • 是的,我昨天已经解决了,我只需要阅读代码就可以得到错误。再次感谢
【解决方案2】:

请检查数据类型

deal.CountryID 和 country.CountryID。这应该是一样的

【讨论】:

    猜你喜欢
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多