Asp.net mvc 3 System.Data.Objects.DataClasses.EntityCollection不包含';单个';

Asp.net mvc 3 System.Data.Objects.DataClasses.EntityCollection不包含';单个';,asp.net-mvc-3,razor,Asp.net Mvc 3,Razor,一些背景信息,我正在使用MVC3 w/EF&db-first方法,以及Razor模板。我将一个视图模型传递给一个视图,该视图模型有两个不同的obj集合,我使用其中一个来填充webgrid(wgSettings)作为其源参数。下面是我试图获取相关行的一些详细信息的代码。 细节: MyInfo是viewmodel中的字典, item是webgrid用于填充行的匿名行对象 item.Value.Value是我要从字典中获取的对象的id字段的值 MySettings是System.Data.Object

一些背景信息,我正在使用MVC3 w/EF&db-first方法,以及Razor模板。我将一个视图模型传递给一个视图,该视图模型有两个不同的obj集合,我使用其中一个来填充webgrid(wgSettings)作为其源参数。下面是我试图获取相关行的一些详细信息的代码。 细节: MyInfo是viewmodel中的字典, item是webgrid用于填充行的匿名行对象 item.Value.Value是我要从字典中获取的对象的id字段的值 MySettings是System.Data.Objects.DataClasses.EntityCollection,因此,我可以使用Single()、FirstOrDefault()等扩展方法

使用quick watch,我能够导航对象并查看预期的值,但是在调试和访问view@runtime时,我遇到以下错误

在线: “@Model.MyInfo[Guid.Parse(item.Value.Value)].MySettings.Single().Value” 调试器在说 “System.Data.Objects.DataClasses.EntityCollection”不包含“Single”的定义,但当我快速观察它时,我得到了值

下面是代码

wgSettings.Column(header: "Value", columnName:"Value", canSort:true, format:  
        @<text>
        @if (item.Value.Type == "Guid" && item.Value.Value != null) {             

            @Model.MyInfo[Guid.Parse(item.Value.Value)].MySettings.Single().Value
        }
        else if (item.Value.Type == "Boolean") { 
            @item.Value.Value 
        }
        else {
            @item.Value.Value 
        }

        </text>
wgSettings.Column(标题:“值”,列名:“值”,canSort:true,格式:
@
@如果(item.Value.Type==“Guid”&&item.Value.Value!=null){
@Model.MyInfo[Guid.Parse(item.Value.Value)].MySettings.Single().Value
}
如果(item.Value.Type==“Boolean”){
@项目价值
}
否则{
@项目价值
}

Linq扩展方法不在范围内,您需要将其添加到顶部(或者可以添加到web.config)

或在“视图”文件夹的web.config中:

<system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
        <namespaces>
            <add namespace="System.Web.Mvc" />
            <add namespace="System.Web.Mvc.Ajax" />
            <add namespace="System.Web.Mvc.Html" />
            <add namespace="System.Web.Routing" />
            <add namespace="System.Linq" />
        </namespaces>
    </pages>
</system.web.webPages.razor>


:-\n相同的错误…我尝试了两种甚至组合的方法,但仍然抛出相同的错误…但我发现发生了一些有趣的事情,使我认为这不是名称空间问题…我替换了一些有趣的事情,使我认为这不是名称空间问题…我替换了@Model.MyInfo[Guid.Parse(item.Value.Value)].MySettings.Single().Value和@Model.MyInfo[Guid.Parse(“1234568-abc3-1234-1234-123456789abc”)].MySettings.Single().Value,我得到了我的结果,这让我相信行中的项对象没有被正确解析…导致相应的对象没有初始化为EntityCollectionObject…有点修复了它,我最后做的是将guid抓取到一个字符串中,在我需要使用它的地方上方几行:@{string itemGuid=item.Value.Value;}然后@Model.MyInfo[Guid.Parse(itemGuid)].MySettings.Single().Value给我的值没有错误。。。
<system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
        <namespaces>
            <add namespace="System.Web.Mvc" />
            <add namespace="System.Web.Mvc.Ajax" />
            <add namespace="System.Web.Mvc.Html" />
            <add namespace="System.Web.Routing" />
            <add namespace="System.Linq" />
        </namespaces>
    </pages>
</system.web.webPages.razor>