将 IQueryable 转换为简单对象
Posted
技术标签:
【中文标题】将 IQueryable 转换为简单对象【英文标题】:Cast IQueryable to a simple object 【发布时间】:2021-07-15 15:32:16 【问题描述】:我尝试在医院管理系统原型中使用IValueConverter
来显示医生的姓氏而不是他的身份证。它将列表视图的值与患者对象的数据(包括医生的 ID)进行转换。
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
using (var db = new MainEntityModel())
user doctor = (from d in db.users where d.user_id == (int)value select d).Cast<user>();
string DoctorName = doctor.surname;
return DoctorName;
我无法处理它。我的查询返回带有一个医生类型对象的IQueryable
,我不能像使用具有特定属性的对象一样使用它。我收到此错误:
无法将类型“System.Linq.IQueryable
”隐式转换为“MyApp.user”。存在显式转换(您是否缺少演员表?
另一种方法也失败了:
using (var db = new MainEntityModel())
var doctor = from d in db.users
where d.user_id == (int)value
select d;
string DoctorName = doctor.surname;
return DoctorName;
我在分配DoctorName
的行上有错误:
“IQueryable”不包含“姓氏”的定义,并且找不到接受“IQueryable”类型的第一个参数的可访问扩展方法“姓氏”(您是否缺少 using 指令或程序集引用?)
我已经尝试了很多方法(创建构造函数,使用查询数据初始化新用户)并现在寻求帮助。
【问题讨论】:
【参考方案1】:使用FirstOrDefault()
代替.Where()
子句,这将为您提供user
类的对象。
using System.Linq;
...
using (var db = new MainEntityModel())
string DoctorName = db.users.FirstOrDefault(x => x.user_id == (int)value)?.surname;
return DoctorName;
【讨论】:
以上是关于将 IQueryable 转换为简单对象的主要内容,如果未能解决你的问题,请参考以下文章
如何解决 - 无法使用Automapper将Generic.List强制转换为Linq.IQueryable?
将 IQueryable<EntityObject> 转换为 IQueryable<Specific>
以更好的性能将 IQueryable<X> 转换为 IQueryable<Y>
实体框架,如何将 IQueryable 与多个 where 转换为 SQL 一起使用?