1

誰かが以下のクエリの正しい構文を教えてもらえますか?

次の場所で「equals」キーワードから始まるデザイン時のコンパイルエラーが発生します。

&& 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;
            }
        }
4

1 に答える 1

2

この質問への回答には、LINQの2つのフィールドに参加できない理由が非常によく説明されています。whereまた、匿名タイプを使用して結合を実行するか、条件の1つを句に移動することもできます。彼は私がLINQPadにまとめた簡単な例で、条件の1つにajoinを使用し、もう1つの条件にawhereを使用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);
于 2013-02-17T18:46:15.817 に答える