LINQ Query, аналогичный SQL, где x IN - PullRequest
2 голосов
/ 22 ноября 2010

Мне нужно создать запрос LINQ, который возвращает результаты на основе подзапроса. Не совсем уверен, что я формулирую это правильно, но лучший способ, которым я знаю, - это показать пример. Как я могу превратить следующий запрос TSQL в запрос LINQ (таблицы имеют то же имя, что и объекты):

SELECT CuisineId, Name 
FROM Cuisine 
WHERE CuisineId NOT IN (SELECT CuisineId 
                        FROM RestaurantCuisine 
                        WHERE RestaurantId = @id)

Как вы можете догадаться, я пытаюсь получить список "доступных" кухонь, которые пользователь может добавить в список кухонь, которые предлагает ресторан. LINQ, который у меня есть, пока возвращает ВСЕ кухни и не учитывает существующие CuisineId, которые уже были добавлены в другую таблицу:

Я просмотрел пример, но не совсем уверен, как точно описать, что мне нужно. Я посмотрел ссылку на MSDN для запросов LINQ, но не смог найти ничего, что мне нужно:

Примеры запросов MSDN LINQ

Кто-нибудь может дать мне пример?

Ответы [ 4 ]

3 голосов
/ 22 ноября 2010

В C #:

var query =
    from c in db.Cuisine

    where !(from rc in db.RestaurantCuisine
            where rc.RestaurantId == id
            select rc.CuisineId)
          .Contains(c.CuisineId)

    select new {
        c.CuisineId,
        c.Name
    };

В VB.NET:

Dim availableCuisines = _
    From c In db.Cuisines _
    Where Not (From rc In db.RestaurantCuisines _
               Where rc.RestaurantId = id _
               Select rc.CuisineId) _
              .Contains(c.CuisineId) _
    Select c
2 голосов
/ 22 ноября 2010
var cuisines = db.Cuisine.Where(c => !RestaurantCuisine.Any(
                rc => rc.RestaurantId == c.Id && rc.CuisineId == c.CuisineId);
1 голос
/ 22 ноября 2010

Попробуйте:

Cuisine.Where(c => !RestaurantCuisine.Select(rc => rc.CuisineID).Contains(c.CuisineID)).Select(c => c);
0 голосов
/ 22 ноября 2010
var query = (from c in Cuisine
              where !(from rest in RestaurantCuisine
                               where (rest.RestaurantID == id)).Contains(c.CuisineId)
                      select new
                                {
                                  CuisineID = c.CuisineID,
                                  Name = c.Name
                                });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...