присоединиться к таблице и получить запись, которая имеет минимальное значение? - PullRequest
0 голосов
/ 05 марта 2019

У меня есть следующая коллекция Модель: Hotel

public class Hotel {
int HotelId {get;set;}
decimal Price {get;set;}
int vendorId {get;set;}
int vendorHotelId {get;set;}
}

Записи будут такими:

HotelId Price VendorId VendorHotelId
1        100    1         0
2        200    2         0
3        300    1         0
4        400    2         1

Если VendorHotelId равен HotelId, тогда мне нужно выбрать запись, котораяимеет самую низкую цену в LINQ.

Я хочу получить такой результат

 HotelId Price VendorId VendorHotelId
    1        100    1         0
    2        200    2         0
    3        300    1         0   

Может кто-нибудь помочь мне решить этот вопрос?

1 Ответ

0 голосов
/ 05 марта 2019

Вы можете использовать условное выражение для группировки на основе вашего состояния, а затем получить минимальную цену для каждой группы, которая будет одной гостиницей, если не найдено ни одного vendorHotelId.

var ans = (from h in hotels
           let hasVendor = h.vendorHotelId > 0
           group h by hasVendor ? h.vendorHotelId : h.HotelId into hg
           let hmin = hg.OrderBy(h => h.Price).First()
           select new {
               HotelId = hmin.HotelId,
               Price = hmin.Price,
               vendorId = hmin.vendorId
           })
          .ToList();

Обновление:Поскольку вы, кажется, используете свободный синтаксис, основанный на вашем комментарии, вот перевод:

var ans2 = hotels.Select(h => new { h, hasVendor = h.vendorHotelId > 0 })
                 .GroupBy(hv => hv.hasVendor ? hv.h.vendorHotelId : hv.h.HotelId, hv => hv.h)
                 .Select(hg => hg.OrderBy(h => h.Price).First())
                 .Select(hmin => new {
                     HotelId = hmin.HotelId,
                     Price = hmin.Price,
                     vendorId = hmin.vendorId
                 })
                 .ToList();

Примечание: где-то кто-то должен написать статью о преимуществах условных выражений GroupBy для необычных группировок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...