Вопрос C # Entity Framework для начинающих - PullRequest
0 голосов
/ 05 августа 2011

Я нахожусь на ранних этапах обучения использованию Entity Framework 4.1 с использованием книги "Программирование Entity Framework" с использованием C # в VS2010.Я столкнулся с проблемой, которая, вероятно, очевидна для опытного программиста EF.

Screen shot of VS2010 editor

«System.Linq.IQueryable» не содержит определения «Заголовок»и не удалось найти метод расширения 'Title', принимающий первый аргумент типа 'System.Linq.IQueryable' (отсутствует директива using или ссылка на сборку?)

Поля «контакты»правильно отображаются во всплывающей справке, но при попытке доступа к этим полям возникает ошибка, показанная выше.При наборе «контактов» список всплывающих полей не содержит подчеркнутых полей.

Я не понимаю этого несоответствия и буду рад вашей помощи.

Ответы [ 2 ]

4 голосов
/ 05 августа 2011
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();

Попробуйте это

3 голосов
/ 05 августа 2011

contacts имеет тип IQueryable, который сам реализует IEnumerable, поэтому то, на что вы действительно смотрите, представляет собой набор контактов, а не один.Но вы пытаетесь получить доступ к определенному контакту в списке.

Вы можете либо обернуть свой метод Console.WriteLine в цикл foreach, чтобы распечатать все контакты, например:

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(...)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...