linq to sql concatenate - ListBox的FirstName和LastName

时间:2013-09-13 22:21:57

标签: linq linq-to-sql

我正在努力让以下工作。我有一个包含字段 FirstName LastName DoctorId 的表格。我想使用Linq to SQL填充.net ListBox。这是我找到和借用的东西:

在一个叫做DALClass的课程中:

public List<Doctor> GetListDoctorsNames()
{
  using (var db = new WaitListDataContext())
  {
    return (from c in db.Doctors
            select new
            {
              FullName = c.FirstName + " " + c.LastName,
              DoctorId = c.DoctorId
            }
            ).ToList<Doctor>;
  }
}

该错误与“)。ToList;”有关。线。错误是:

  

错误1无法将方法组“ToList”转换为非委托类型   'System.Collections.Generic.List'。你打算调用吗?   该   方法?问:\ myapp \ WaitList \ App_Code \ DALClass.cs 37 16问:\ myapp \ WaitList \

我不确定我是否应该放<String>而不是<Doctor>。我试过了,但它不起作用。

4 个答案:

答案 0 :(得分:5)

您的查询返回匿名类型,而您实际上并未调用ToList方法。您可能需要指定数据类型select子句,并使用括号调用ToList方法,如下所示:

return 
    (from c in db.Doctors
     select new Doctor
     {
        FullName = c.FirstName + " " + c.LastName,
        DoctorId = c.DoctorId
     })
    .ToList<Doctor>(); // or just .ToList();

<强>更新

要解决第二个错误(“'Doctor'不包含'FullName'的定义”),问题是您没有在Doctor上定义任何此类属性

您可以尝试在Doctor上定义一个单独的属性,但我不确定Linq-to-SQL是否允许这样做。您也可以重复使用其中一个现有属性(例如LastName),但这听起来并不是特别优雅。

我建议设计一个单独的实体(通常你用匿名类型完成这个,但是因为看起来你是从一个方法返回这个,如果你关心类型安全,这不是一个选项):

public class DisplayDoctor
{
    public string FullName { get; set; }
    public int DoctorId { get; set; }
}

return 
    (from c in db.Doctors
     select new DisplayDoctor
     {
        FullName = c.FirstName + " " + c.LastName,
        DoctorId = c.DoctorId
     })
    .ToList<DisplayDoctor>(); // or just .ToList();

答案 1 :(得分:3)

第一个问题,ToList()是一种方法,需要被称为一个:

).ToList<Doctor>();

其次,您将无法将匿名类型转换为Doctor类。你想要的是:

  return (from c in db.Doctors
            select new Doctor() // Create Doctor instance
            {
              FullName = c.FirstName + " " + c.LastName,
              DoctorId = c.DoctorId
            }
          ).ToList(); // No longer a need to specify type on generic method

更新:如果是我,我只是更新Doctor类(无论如何自动生成的模型都是部分类),以便拥有FullName属性这样:

public partial class Doctor
{
   public string FullName // Read only FullName property
   {
      get
      {
         return this.FirstName + " " + this.LastName;
      }
   }
}

然后,您只需返回Doctor个对象列表(我假设db.DoctorsDoctor个对象的集合):

  return (from c in db.Doctors select c).ToList();

直接绑定到对象的FullName属性。

答案 2 :(得分:2)

我假设Doctor类实际上是数据库上下文中的实体。在这种情况下,您需要创建自己的类型并返回而不是Doctor

public List<MyDoctor> GetListDoctorsNames()
{
  using (var db = new WaitListDataContext())
  {
      return db.Doctors.Select(c => new MyDoctor()
             {
                 FullName = c.FirstName + " " + c.LastName,
                 DoctorId = c.DoctorId
             }).ToList();
  }
}

public class MyDoctor
{
  public string FullName {get; set;} 
  public int DoctorId {get; set;} //Or what ever type DoctorId is
}

答案 3 :(得分:0)

我相信你只是错过了括号,表示你正在尝试执行ToList&lt;&gt;()方法:)

using (var db = new WaitListDataContext())
{
  return (from c in db.Doctors
        select new
        {
          FullName = c.FirstName + " " + c.LastName,
          DoctorId = c.DoctorId
        }
      ).ToList<Doctor>();

}