簡體   English   中英

C#LINQ一對多發現差異

[英]C# LINQ Find Difference in One to Many

我有一對多詞典,我需要查找數據中的任何差異以發送給用戶。 以下是我的查詢

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

我願意接受任何建議。 需要找到Container 456信息與其他信息不匹配。 希望我提供足夠的信息

快速獲勝將是:

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 && ...);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM