我正在努力让以下工作。我有一个包含字段 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>
。我试过了,但它不起作用。
答案 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.Doctors
是Doctor
个对象的集合):
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>();
}