2015-02-18 3 views
1

Я использую EFF с базой данных MySql, где у меня есть 3 разных таблицы (например, пользователи, продукты, пользователи). и естьОптимизация выражений LINQ

  1. ПользователиИнтерес имеет список пользователей, участвующих в покупке бакалеи.
    Столбец UserInvolved является внешним ключом к users.UserID и
    Столбец GroceryID является внешним ключом groceries.ItemID.
  2. бакалея имеет список продуктов, которые были приобретены.
  3. пользователи имеют список сведений о пользователе. (Только Имя обеспокоен таблицы)

То, что я хочу добиться того, что
Перечень продовольственных товаров выбран FRM стол groceries , Основываясь на этом списке, я должен получить список пользователей, участвующих в покупке этого списка, из таблицы usersItems. Наконец, я должен получить имена этих пользователей из таблицы users и показать эти имена как разделенные точкой с запятой .

Вот связь между tables- enter image description here

и вот что я пытался добиться этого Linq

var gList = entities.groceries.Select(item => item.ItemID); 
var uInvolved = entities.usersitems.Where(item => gList.Contains(item.GroceryId)).Select(u => u.userInvolved); 
var usrs = string.Join(";", entities.users.Where(us => uInvolved.Contains(us.UserID)).Select(name => name.FullName)); 

Используя эту LINQ, я получаю результат, что я хочу, но как вы видите, это мало оптимизировано. В целом, я хочу сократить/оптимизировать эти запросы, и я очень смущен, когда я ошибаюсь. Кроме того, я пытался достичь этого результата как View непосредственно из базы данных, но все же я не мог.

ответ

2

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

var query = entities.users.Where(u=> u.useritems.SelectMany(ui=> ui.groceries).Any()).Select(u=> u.FullName); 

Это использует навигационные свойства ... если вы получите ForeignKey отношения ... ваши свойства навигации может быть названы другими, хотя

0

То, что вы пытаетесь достичь, это a many-to-many relationship с использованием bridge table. Я предлагаю проверить этот учебник по адресу: https://www.youtube.com/watch?v=uMQwORSTGX4.

В принципе, вам нужно удалить столбец IndexNum. Затем вы должны сгенерировать свою модель, и вы сможете проверить:

var groceries = user.Groceries; 
var users = gorcery.Users; 
Смежные вопросы