2013-02-17 3 views
1

Может кто-нибудь, пожалуйста, сообщите мне, какой правильный синтаксис для нижеследующего запроса?LINQ Ошибка составления времени времени

Я получаю ошибку компиляции времени проектирования, начиная на «равный» ключевое слово в следующем месте:

&& a.applicationid equals ga.applicationid 

со следующей ошибкой: «Тело запроса должно заканчиваться отборным пунктом или статьей группы»

Я понимаю, что означает, что ошибка, но я не могу увидеть, что ошибка синтаксиса ....

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

+0

Прохладный! Рад, что смог помочь! – rsbarro

Смежные вопросы