2013-02-17 55 views
1

有人能告诉我什么下面的查询是正确的语法?LINQ设计时编译错误

我得到一个设计时编译错误在“等于”关键字在以下点开始:

&& a.applicationid equals ga.applicationid 

,出现以下错误: “查询体必须与SELECT子句或group子句结束”

我明白了什么错误意思,但我看不出语法错误是什么....

public static List<ApplicationConfigurations> GetAppConfigs() 
     { 
      try 
      { 
       using (wmswebEntities DbContext = new wmswebEntities()) 
       { 
        IEnumerable<ApplicationConfigurations> myAppConfigs = new IEnumerable<ApplicationConfigurations>(); 

        myAppConfigs = (from a in DbContext.ApplicationConfigurations 
            join ga in DbContext.groupapplicationconfigurationslk on a.configurationid equals ga.configurationid 
            && a.applicationid equals ga.applicationid 
            join g in DbContext.Groups on g.groupnumber equals ga.groupnumber 
            where a.ActiveFlag == true 
             && ga.ActiveFlag == true 
             && g.ActiveFlag == true 
            select 
             a.applicationconfigurations, 
             g.groupnumber).ToList(); 

        return myAppConfigs; 
       } 
      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 
     } 

回答

2

答案this question有一个非常好的解释,为什么你不能加入LINQ的两个领域。它还表明,您可以使用匿名类型进行连接,也可以将其中一个条件移至where子句中。他是我在LINQPad中加入的一个快速示例,用于说明其中一个条件使用join,另一个使用where,使用匿名类型使用join

var applicationConfigs = new[] { 
    new { ApplicationID = 1, ConfigurationID = 1, Name = "Application #1" }, 
    new { ApplicationID = 2, ConfigurationID = 1, Name = "Application #2" }, 
    new { ApplicationID = 3, ConfigurationID = 2, Name = "Application #3" }, 
    new { ApplicationID = 4, ConfigurationID = 2, Name = "Application #4" } 
}; 
var groupApplicationConfigs = new[] { 
    new { ApplicationID = 1, ConfigurationID = 1, Name = "Group App Config #1" }, 
    new { ApplicationID = 1, ConfigurationID = 1, Name = "Group App Config #2" }, 
    new { ApplicationID = 2, ConfigurationID = 1, Name = "Group App Config #3" }, 
    new { ApplicationID = 3, ConfigurationID = 1, Name = "Group App Config #4" } 
}; 

//JOIN + WHERE 
var q = from a in applicationConfigs 
     join ga in groupApplicationConfigs 
      on a.ApplicationID equals ga.ApplicationID 
     where a.ConfigurationID == ga.ConfigurationID 
     select a; 
Console.WriteLine(q); 

//ANONYMOUS TYPE 
var r = from a in applicationConfigs 
     join ga in groupApplicationConfigs 
      on new { a.ApplicationID, a.ConfigurationID } equals 
       new { ga.ApplicationID, ga.ConfigurationID } 
     select a; 
Console.WriteLine(r); 
+0

非常感谢您的回复:)我实施了后者,现在很好。 – sagesky36 2013-02-17 21:58:57

+0

酷!很高兴我能帮上忙! – rsbarro 2013-02-17 22:28:13