2012-05-24 2 views
1

Объединения данных из двух списков условноОбъединения данных из двух списков условно

структуры таблицы выглядит следующим образом

MobileID ModelID ManufacturerID IsApproved 

где IsApproved это логическое значение,

Когда новая мобильная запись делается в базе данных, это отправляется на утверждение менеджеру, пока это значение IsApproved равно 0, когда оно будет одобрено. Значение IsApproved станет равным 1.

Я хочу d о следующем

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

Теперь проблема в том, что я должен показать все мобильные телефоны на основе 2-й условия

1) Если мобильный существует с тот же идентификатор modelID и manufacturerID (означает, что спецификация обновлена), чем поле IsApproved станет 0 -> не в БД, а только в списке только для отображения)

2) Если Mobile является новым, чем статус IsApproved должен быть 0

Что мне делать, чтобы слить эти два списка условно?

Мои LINQ запросы, как показано ниже

var listApproved = objMobile.MobileLists.where(mb => mb.IsApproved == true).toList(); 
var listUnApproved = objMobile.MobileLists.where(mb => mb.IsApproved == false).toList(); 

Пусть данные таблицы следующим образом

MobileID ModelID  ManufacturerID  IsApproved 
01   mod1    manu1    1 
02   mod2    manu2    1 
03   mod3    manu3    1 
04   mod1    manu1    0 
05   mod5    manu5    0 
06   mod6    manu6    0 
07   mod2    manu2    0 

Я хочу список, как

MobileID ModelID  ManufacturerID  IsApproved 
01   mod1   manu1   0 
02   mod2   manu2   0 
03   mod3   manu3   1 
05   mod5   manu5   0 
05   mod6   manu6   0 
+0

ваш список кажется неправильным «если ModelID и ManuId одинаковы, то IsApproved = 0», но MobileID 2 и 3 Mobile оба имеют ту же модель & Manu id, и ваш список отображает их на 1 в IsApproved –

+0

Я должен отредактировать данные для лучшего понимания ... –

ответ

1

Ну, давайте сначала кэшировать список в памяти, чтобы мы не получали его более одного раза:

var listOfAllMobiles = objMobile.MobileLists.ToList(); 

Теперь давайте сделаем вашу логику, чтобы получить все мобильные:

var mobileList = listOfAllMobiles 
    .Select(m => new Mobile 
       { 
        IsApproved = m.IsApproved == true && !listOfAllMobiles 
         .Any(l => l.ModelID == m.ModelID 
          && l.ManufacturerID == m.ManufacturerID 
          && l.MobileID != m.MobileID), 
        MobileID = m.MobileID, 
        ModelID = m.ModelID, 
        ManufacturerID = m.ManufacturerID 
       }) 
    .ToList(); 

EDIT: Приведенный выше код будет установить правильные значения, но это не будет отфильтровывать мобильные телефоны с дубликатом ManufacturerId и ModelID. Вы должны будете использовать дополнительный foreach для этого, например, так:

var displayMobileList = new List<Mobile>(); 

foreach(var mobile in mobileList 
    .Where(m => !displayMobileList 
     .Any(m2 => m2.ModelID == m.ModelID 
      && m2.ManufacturerID == m.ManufacturerID))) 
{ 
    displayMobileList.Add(mobile); 
} 
+0

Есть ли что-то? потому что он дает ошибку в .Where (m => listOfAllMobiles) –

+0

Попробуйте сейчас, не знаю, как это оказалось там! – mattytommo

+0

дает ошибку в && в основном запросе, означает ли это единственный & [логический AND] оператор? –

Смежные вопросы