2014-10-23 2 views
1

Когда я использую метод Include я получил эту ошибку:«Заданный Включить путь не является допустимым» при использовании Включить

A specified Include path is not valid

Мои классы:

public class ClubMember 
{ 
    public int Id { get; set; } 

    public string Name { get; set; } 

    public System.DateTime Date { get; set; } 
} 

public class Card 
{ 
    public int Id { get; set; } 

    public int CardNumber { get; set; } 

    public ClubMember Member { get; set; } 
} 

Строка, когда я получил сообщение об ошибке:

IList<Card> cards = db.Cards.Include(n => n.Member.Name).Include(n => n.Member.Date).ToList(); 

Я хочу, чтобы получить этот комбинированный стол:

CardNumber | Name | Date

Что не так?

+1

'.Include (n => n.Member)' должно быть достаточно. –

+0

Я пробую это, но у меня худший результат: | CardNumber | Участник | В поле члена только эти строки: «MyDataBase.Data.Entities.ClubMember» –

+0

@ viton-zizu Нет, свойство 'Member' не возвращает строку' 'MyDataBase.Data.Entities.ClubMember'', она возвращает объект типа 'MyDataBase.Data.Entities.ClubMember', для которого функция' ToString() '(которую вы не должны вызывать) возвращает' MyDataBase.Data.Entities.ClubMember''. Вместо вызова этой функции «ToString()» обратитесь к свойствам объекта «Имя» и «Дата». – hvd

ответ

0

Include должны включать entites не свойства:

var cards = db.Cards.Include(n => n.Member).ToList(); 

Это будет готов-загрузить связанную Member -логического объекта для каждого загруженного Card (включая все скалярные свойства).
Тогда вы можете получить доступ к ним:

foreach (var card in cards) 
{ 
    int cardNumber = card.CardNumber; 
    string name = card.Member.Name; 
    DateTime date = card.Member.Date; 
} 

Если вы хотите получить, что три свойства можно также отобразить запрос анонимного типа:

var cards = db.Cards.Select(c => 
       new { 
        CardNumber = c.CardNumber, 
        Name = c.Member.Name, 
        Date = c.Member.Date 
       } 
      ).ToList(); 

foreach (var card in cards) 
{ 
    int cardNumber = card.CardNumber; 
    string name = card.Name; 
    DateTime date = card.Date; 
} 

Но это имеет смысл только если вы стол на самом деле намного больше, чем показано здесь. Если они не я, я бы определенно пошел с «настоящими entites» - особенно если вы хотите их обновить в какой-то момент.

+0

Благодарим за отзыв! Я попробую! –

+0

Извините, все сработало! Большое спасибо вам снова! –

Смежные вопросы