2017-02-20 1 views
0

У меня есть словарь для одного словаря, и мне нужно найти какие-либо несоответствия в данных для отправки пользователям. Ниже мой запросC# LINQ Найти разницу в одном для многих

var FinalQuery = from final in masterquery 
       where final.gpa_vsl != string.Empty || final.eta1_datetime.Date.CompareTo(final.eta_date.Date) != 0 || 
       final.ata_date > DateTime.MinValue || final.cfit_vsl != final.gpa_vsl 
       group final by final.file_no into newGroup 
       orderby newGroup.Key 
       select newGroup; 
var Finaldict = FinalQuery.ToDictionary(g => g.Key, g => g.ToList()); 

foreach(var file in FinalDict) { 
    if (file.Value.Count() > 1) { 
    //Here I need to find out if all eta1 and all vessel match 
    //below is what I am trying to do with Linq 

    bool match = from f in file.Value 
      where file.Value.Count(f => f.eta1_date.CompareTo(f.eta1_date)) = file.Value.Count() 
      select true; 

    //What I am trying to do is if all eta1 dates match return a total int to compare to the total count of values. 
    } 
} 

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

Key - FileNo = 123 
Value - Container = 123 , eta1 = 2/20/17, ata1 = 2/20/17, vessel = boat1 
Value - Container = 456, eta1 = 2/18/17, ata1 = 2/18/17, vessel = boat2 
Value - Container = 789, eta1 = 2/20/17, ata1 = 2/20/17, vessel = boat1 
Value - Container = 987 , eta1 = 2/20/17, ata1 = 2/20/17, vessel = boat1 

Я открыт для любых предложений. Необходимо найти, что информация о контейнере 456 не соответствует другим. Надеюсь, что я предоставил достаточно информации

+0

вы могли бы разработать на том, что представляет собой несоответствие в вашем примере словаря? – pquest

+0

Цель состоит в том, чтобы все этаны, ata1 и сосуды соответствовали друг другу. В приведенном выше примере eta1 не соответствует остальной части eta1. Если все не совпадают, мне нужно вернуть исключение пользователю –

+0

Просто обратите внимание, что 'orderby', за которым следует' .ToDictionary', уничтожает заказ, поскольку словарь не гарантирует никакого заказа при перечислении – tinudu

ответ

1

Быстрая победа будет:

bool match = file.Value.GroupBy(f => new {f.eta1, f.ata1, f.vessel}).Take(2).Count() == 1 

, или лучше:

var c0 = file.Value[0]; 
var match = file.Value.Skip(1).All(c => c.ata1 == c0.ata1 && ...); 
+0

Я оставил работу в течение дня, но обещает обе эти завтра. Спасибо, что отправили его за –

+0

. Спасибо за вашу помощь –

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