我在这里有这个变量:var value = service.Get(UserId)
这会从IQueryable返回数据并产生结果。我希望从下面的截图中的结果中获取语言,我该怎么做?我试过value[0].language
但是没有用:(
任何建议都会有所帮助:
我希望获得“英语”的语言价值 请帮忙。
我试过了: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;
答案 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;