我正处于学习使用实体框架4.1的早期阶段,使用VS2010中使用C#的“编程实体框架”一书。我遇到了一个对经验丰富的EF程序员来说很明显的问题。
“System.Linq.IQueryable”不包含“Title”的定义,并且没有可以找到接受“System.Linq.IQueryable”类型的第一个参数的扩展方法“Title”(你错过了吗?使用指令或程序集引用?)
在弹出式帮助中正确识别“联系人”字段,但尝试访问这些字段会产生上面显示的错误。输入“联系人”时,弹出字段列表不包含任何带下划线的字段。
我不明白这种不一致,欢迎你的帮助。
答案 0 :(得分:4)
var contacts = (from c in context.Person_Contacts
where c.FirstName == "Robert"
select new { c.Title, c.FirstName, c.LastName }).FirstOrDefault();
Console.WriteLine("{0} | {1} | {2}", contacts.Title, contacts.FirstName, contacts.LastName);
Console.ReadLine();
试试
答案 1 :(得分:3)
contacts
属于IQueryable
类型,它本身实现了IEnumerable
,所以你实际看到的是联系人的集合,而不是单个联系人。但您尝试访问列表中的特定联系人。
您可以在foreach循环中包装Console.WriteLine
方法以打印出所有联系人,如下所示:
foreach (var contact in contacts.ToList()) // ToList will cause EF to perform the SQL query and load the complete results in a list.
{
Console.WriteLine("{0} | {1} | {2}", contact.Title, contact.FirstName, contact.LastName);
}
如果您只是寻找单个联系人,可以使用First(),Last()或Single()方法,这将返回相应的实体。
var contact = contacts.FirstOrDefault(); // Get the first contact with the specified name or a null-reference if the query has no results:
if (null != contact)
{
Console.WriteLine(...)
}