查询不会产生预期的结果

时间:2012-10-04 10:04:09

标签: c# linq entity-framework-4

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")时,我将光标悬停在该控件上,它什么也没显示。任何人都可以帮助我。

1 个答案:

答案 0 :(得分:0)

第二个查询的结果不是Platform的对象,而是IQueryable。因此,ToString不会返回您期望的任何字符串。另外,第二个查询(可能是第一个)根本不对数据库执行,因为没有任何东西强制执行(即没有评估)。我也相信你可以只有一个查询而不是两个。像这样:

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

应该做的 - 首先,它结合了两个查询。其次,它使用.Single()强制进行查询评估。这样,查询将被发送到数据库以获取结果。我假设您只期望给定项目的一个结果,因此我使用Single()。 .Single()的结果是单个对象而不是IEnumerable,因此您应该能够获得您的platformName。此外,如果platformName是字符串,则不必使用.ToString()。