ASP.NET MVC 4从IQueryable获得价值

时间:2014-06-26 20:55:19

标签: c# asp.net asp.net-mvc-4

我在这里有这个变量:var value = service.Get(UserId)这会从IQueryable返回数据并产生结果。我希望从下面的截图中的结果中获取语言,我该怎么做?我试过value[0].language但是没有用:(

任何建议都会有所帮助:

enter image description here

我希望获得“英语”的语言价值  请帮忙。

我试过了:string value = service.Get(UserId).FirstOrDefault().Language;

我收到错误'System.Linq.IQueryable'不包含'FirstOrDefault'的定义,并且没有扩展方法'FirstOrDefault'接受类型'System.Linq.IQueryable'的第一个参数可以找到(你错过了吗?) using指令或汇编引用?)'

以下是我正在使用的内容:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WebMatrix.WebData;
using CTHRC.Roti.Domain.Model;
using CTHRC.Roti.Domain.Api.Services;
using CTHRC.Roti.Domain.Data.Repositories;
using CTHRC.Roti.Data.EntityFramework.Repositories;
using CTHRC.Roti.Data.EntityFramework;

4 个答案:

答案 0 :(得分:2)

IQueryables与普通数组略有不同。要查看结果视图,您必须枚举IQueryable。您实际上可以在屏幕截图中看到“扩展结果视图将枚举IEnumerable”。这句话是这种情况的关键。如果未枚举IEnumerable,则不会从数据库中获取实际数据。代码中有多种方法可以枚举IEnumerable,例如使用.ToList,.Select,.Single,.First和其他一些方法。

我相信使用.FirstOrDefault()会很有趣。 “OrDefault”部分仅表示如果列表为空,则不会抛出异常。根据情况,这可能是也可能不合适。

string language = service.Get(UserId).FirstOrDefault().Language;

为了避免在没有用户返回时发生异常,可以先使用投影。

string language = service.Get(UserId).Select(u => u.Language).FirstOrDefault();

如果没有用户,将生成 null

答案 1 :(得分:1)

尝试使用Cast(),如下所示

 string Language= service.Get(UserId).Cast<Users>().FirstOrDefault().Language;

答案 2 :(得分:0)

代码值中的几个选项是项目列表而非值。

string xyz = value[0].Language;

Just get a single item

var item = service.Get(UserId).FirstOrDefault();
string xyz = item.Language;

如果没有强类型     string xyz = item [“Language”];

答案 3 :(得分:0)

我同意sywester的答案,但稍微调整一下。您必须首先检查null,否则您将在系统中引入null错误。 所以

var a = service.Get(UserId).FirstOrDefault(); string Language = a!=null? a.Language : string.Empty;