C#Entity Framework初学者问题

时间:2011-08-04 20:10:39

标签: c# visual-studio-2010 entity-framework

我正处于学习使用实体框架4.1的早期阶段,使用VS2010中使用C#的“编程实体框架”一书。我遇到了一个对经验丰富的EF程序员来说很明显的问题。

Screen shot of VS2010 editor

“System.Linq.IQueryable”不包含“Title”的定义,并且没有可以找到接受“System.Linq.IQueryable”类型的第一个参数的扩展方法“Title”(你错过了吗?使用指令或程序集引用?)

在弹出式帮助中正确识别“联系人”字段,但尝试访问这些字段会产生上面显示的错误。输入“联系人”时,弹出字段列表不包含任何带下划线的字段。

我不明白这种不一致,欢迎你的帮助。

2 个答案:

答案 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(...)
}