2013-06-14 2 views
2

В английском я пытаюсь: «Вернуть список людей, которые не имеют в TeamID в их Список командзапросов LINQ C# ASP

У меня есть много-ко-многим между таблицей Person и таблица команды, так что каждый экземпляр Person имеет список команд, что они являются членом. (каждая команда имеет список людей)

Table
здесь Person 2 будет иметь список из двух Командные объекты с идентификаторами 1 и 2

Я пытаюсь написать запрос, который, если TeamID было 18, что вернется только лица 1 и 3, например

Это моя попытка:

var query = from p in db.People 
      where(query2 = from t in p.Teams 
          where t.ID != teamID 
          select t) 
      select p; 
+1

Это плохое название. Пожалуйста, прочитайте http://meta.stackexchange.com/questions/10647/how-do-i-write-a-good-title –

+0

Простите, что это немного общего, как я могу быть более конкретным в названии? – Jimmy

+0

1) Ваше требование, похоже, отличается от запроса, который вы предоставили, или они не очень понятны. 2) ваш вложенный запрос выбирает 't', но не дает true или false (потому что предложение where предназначено для возврата true или false) – wakqasahmed

ответ

6

Использование метода на основе LINQ синтаксис это становится:

var query = db.People.Where(p => !p.Teams.Any(t => t.ID == 18)); 
+0

Спасибо, сэр! – Jimmy

+0

@JimBarton Добро пожаловать! –

+0

Вы также можете использовать 'db.People.Where (p => p.Teams.All (t => t.ID! = 18))', если вы найдете это более читаемым. –

0

Адаптировано к вашему коду:

var query =  
     from p in db.People 
     where !(from t in db.Teams  
       select t.ID)  
       .Contains(p.ID)  
     select p; 
Смежные вопросы