0
using (Entities PlatfrmName = new Entities())
{
    foreach (string selectedProject in SplitSelectedprojects)
    {
        var platformId = from platformID in PlatfrmName.AppProjects84
                         where platformID.ProjectName == selectedProject
                         select platformID.PlatformId;

                        var platformName = from platfrmName in PlatfrmName.AppPlatforms84
                                           where platfrmName.PlatformId.ToString() == platformId.ToString()
                                           select platfrmName.PlatformName;
                        //Get the projects based on the platforms
                        if (platformName.ToString() == "Base")
                            BASE += selectedProject + ",";
                        if (platformName.ToString() == "Windows")
                            WINDOWS += selectedProject + ",";
                        if (platformName.ToString() == "Web")
                            WEB += selectedProject + ",";
                        if (platformName.ToString() == "Wpf")
                            WPF += selectedProject + ",";
                        if (platformName.ToString() == "Silverlight")
                            SILVERLIGHT += selectedProject + ",";
                        if (platformName.ToString() == "Mvc")
                            MVC += selectedProject + ",";
    }
}

結果は と予想されるplatformName == Baseので、そのプロジェクトを BASE 変数に追加する必要があります。コントロールが に来たら if (platformName.ToString() == "Base")、カーソルをそこに合わせますが、何も表示されません。誰でもこれを手伝ってもらえますか。

4

1 に答える 1

0

2 番目のクエリの結果は Platform のオブジェクトではなく、IQueryable です。したがって、ToString は期待する文字列を返しません。さらに、2 番目のクエリ (およびおそらく最初のクエリ) は、実行を強制するものがない (つまり、評価がない) ため、データベースに対してまったく実行されません。また、クエリは 2 つではなく 1 つだけでよいと思います。このようなもの:

var platformName = (from platform in PlatfrmName.AppProjects84 
                   where platformID.ProjectName == selectedProject 
                   select platform.PlatformName).Single();

トリックを行う必要があります-最初に、2つのクエリを結合します. 次に、.Single() を使用してクエリの評価を強制します。このようにして、クエリがデータベースに送信され、結果が取得されます。特定のプロジェクトに対して 1 つの結果のみを期待していると想定しているため、Single() を使用しました。.Single() の結果は単一のオブジェクトであり、IEnumerable ではないため、platformName を取得できるはずです。また、platformName が文字列の場合、.ToString() を使用する必要はありません。

于 2012-10-05T18:32:49.573 に答える