2013-10-24 4 views
1

Сначала я использую MVC4 с кодом Entity Framework.Доступ к внешнему ключу от одного к другому отношениям с использованием LINQ

У меня есть следующие модели:

public class Member { 

    public int ID { get; set; } 

    [Display(Name = "First Name")] 
    [Required(ErrorMessage = "Please enter a first name.")] 
    public string FirstName { get; set; } 

    [Display(Name = "Last Initial")] 
    [Required(ErrorMessage = "Please enter the last initial of your last name.")] 
    [MaxLength(1)] 
    public string LastName { get; set; } 

    [Display(Name = "City")] 
    [Required(ErrorMessage = "Please enter your city.")] 
    public string City { get; set; } 

    public virtual ICollection<Favorite> Favorites { get; set; } 
} 

public class Favorite { 
    public int ID { get; set; } 
    public String Type { get; set; } 
    public String Value { get; set; } 
} 

Мой код получает список поисковых терминов List<string> searchTerms от переднего конца. Мне нужно искать значения фаворитов каждого участника для каждого поискового запроса.

Я работаю следующее заявление LINQ:

return db.Favorites.Where(f => searchTerms.Any(s => f.Value.Contains(s))).ToList(); 

Мой вопрос это будет возвращать List<Favorite>, который является большим, но то, что мне действительно нужно, это идентификатор элемента, связанного в базе данных. К сожалению, это не вариант, который я могу выбрать в LINQ

return db.Favorites.Where(f => searchTerms.Any(s => f.Value.Contains(s))).Select(f => f.????) .ToList(); 

??? ??? только дает мне ID, Type, Value. Свойства Favortie, однако в базе данных базы данных Entity Framework создан столбец внешнего ключа Member_ID. Но я не могу выбрать это на C#.

Так что мои вопросы ... как я? Добавляю ли я только public virtual int MemberID в избранное? Будет ли инфраструктура сущности автоматически связываться с внешним ключом?

+0

Почему не будет вы просто пытаетесь добавить дополнительное свойство в класс «Любимый»? – MarcinJuraszek

ответ

3

на основе коды первых конвенций, для добавления внешнего ключа просто:

public int MemberID { get; set; } 

Если вам нужно навигационное свойство затем

public virtual Member Member { get; set; } 

Проверить это MSDN page для получения дополнительной информации

+0

'public virtual Member Member {get; задавать; } 'это то, что мне нужно. –

+0

В любое время, рад, что смогу помочь. благодаря! –

+0

У меня есть аналогичная проблема в контексте этого вопроса, который я опубликовал, который я еще не решил: 'https://social.msdn.microsoft.com/Forums/vstudio/en-US/d49772c9-c108-4418-b782- e231f60b6ffc/foreign-id-attribute-not-access-in-linq-query-for-an-the-a-class-that-has-a-list-of? forum = csharpgeneral' Я добавил виртуальную свойство 'Folders', но я до сих пор не могу получить доступ к свойству внешнего ключа' Folder_Id' 'Folder', который был сгенерирован Code First. Может кто-нибудь помочь? – naz786

1

Вы можете получите коллекцию Участников с фильтрованной детской коллекцией.

Пример:

return db.Members.Select(member => new 
    { 
     Member = member, 
     Favorites = member.Favorites.Where(f => searchTerms.Any(s => f.Value.Contains(s))) 
    }).Where(m => m.Favorites.Any()).ToList(); 

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

0

Это работает:

return db.Members.Select(member => new 
    { 
     Member = member, 
     Favorites = member.Favorites.Where(f => searchTerms.Any(s => f.Value.Contains(s))) 
    }).Where(m => m.Favorites.Any()).ToList(); 
Смежные вопросы