将 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 一起使用?

无法将类型“IQueryable”隐式转换为 Generic.IList' 从 EF 上下文中检索记录列表作为列表

将 IQueryable<int> 转换为 <int>