【问题标题】:Cast IQueryable to a simple object将 IQueryable 转换为简单对象
【发布时间】: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 指令或程序集引用?)

我已经尝试了很多方法(创建构造函数,使用查询数据初始化新用户)并现在寻求帮助。

【问题讨论】:

    标签: c# wpf linq


    【解决方案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;
        }
    

    【讨论】:

      猜你喜欢
      • 2018-10-16
      • 1970-01-01
      • 1970-01-01
      • 2019-09-30
      • 2012-02-07
      • 2013-06-18
      • 2010-10-19
      • 2018-12-13
      • 2023-03-13
      相关资源
      最近更新 更多