ऐसा करने के लिए कुछ टुकड़े हैं, मानते हैं कि प्रत्येक सूची में डुप्लीकेट नहीं होते हैं, नाम एक अद्वितीय पहचानकर्ता है, और न ही सूची का आदेश दिया जाता है।
पहले एक एकल सूची प्राप्त करने की संलग्न विस्तार विधि बनाने के लिए:
static class Ext {
public static IEnumerable<T> Append(this IEnumerable<T> source,
IEnumerable<T> second) {
foreach (T t in source) { yield return t; }
foreach (T t in second) { yield return t; }
}
}
इस प्रकार एक सूची प्राप्त कर सकते हैं:
var oneList = list1.Append(list2);
फिर नाम पर समूह
var grouped = oneList.Group(p => p.Name);
तो कर सकते हैं
एक समय में एक समूह को संसाधित करने के लिए प्रत्येक समूह को एक सहायक के साथ संसाधित करें
public Person MergePersonGroup(IGrouping<string, Person> pGroup) {
var l = pGroup.ToList(); // Avoid multiple enumeration.
var first = l.First();
var result = new Person {
Name = first.Name,
Value = first.Value
};
if (l.Count() == 1) {
return result;
} else if (l.Count() == 2) {
result.Change = first.Value - l.Last().Value;
return result;
} else {
throw new ApplicationException("Too many " + result.Name);
}
}
कौन सा grouped
के प्रत्येक तत्व के लिए लागू किया जा सकता है:
var finalResult = grouped.Select(g => MergePersonGroup(g));
(चेतावनी:। अपरीक्षित)
क्या linq वास्तव में जरूरी है - लिनक-आश अभिव्यक्तियों के साथ एक अच्छा foreach भी कर सकता है। – Rashack
इस टिप्पणी को प्रश्न के शीर्षक के संस्करण के रूप में जोड़ना और वास्तविक प्रश्न मेल नहीं खाता: इसका वास्तविक जवाब [माइक से यह जवाब] है (http://stackoverflow.com/a/6772832/1542187)। अधिकांश अन्य उत्तरों, उपयोगी होने पर, मूल पोस्टर द्वारा प्रस्तुत समस्या को वास्तव में हल नहीं करते हैं। –