0
Dictionary<int, string> lstSrc = new Dictionary<int, string>();
            Dictionary<int, string> lstDest = new Dictionary<int, string>();

        lstSrc.Add(1, "All");
        lstSrc.Add(2, "Weekday");
        lstSrc.Add(3, "WeekEnd");

        lstDest.Add(1, "All");
        lstDest.Add(2, "X1");
        lstDest.Add(3, "X2");
        lstDest.Add(4, "Weekday");
        lstDest.Add(5, "WeekEnd");

ソースと宛先で名前が一致する場合のみ比較する

  var matchingItems = lstDest
                    .Where(l2 => lstSrc.Any(l1 => l1.Value.Equals(l2.Value))).ToList();
                matchingItems.AddRange(lstDest.Except(matchingItems));

このクエリは、添付の画像にあるように、LINQ を使用せずにその結果を取得する方法を示しています。

どうすればこれを達成できますか?

  [1]: http://i.stack.imgur.com/FLicZ.png
4

2 に答える 2

1

一致するアイテムを取得するには、次のようなクエリを使用できます。

var matchingItems = List2
    .Where(l2 => List1.Any(l1 => l1.TimeGroupName.Equals(l2.TimeGroupName));
matchingItems.AddRange(List2.Except(matchingItems)));

編集済み:Linqを使用しない場合と同等:(ボイラープレートLinqが書く手間をどれだけ節約できるか忘れがちです!)

// Get the matching items
List<TIMEGROUPINFO> matchingItems = new List<TIMEGROUPINFO>();
foreach (TIMEGROUPINFO l1 in List1)
{
    foreach (TIMEGROUPINFO l2 in List2)
    {
       if (l1.TimeGroupName.Equals(l2.TimeGroupName))
       {
            matchingItems.Add(l1);
            continue;
       }
    }
 }

 // Append the items from List2 which aren't already in the list:
 foreach (TIMEGROUPINFO l2 in List2)
 {
     bool exists = false;
     foreach (TIMEGROUPINFO match in matchingItems)
     {
         if (match.TimeGroupName.Equals(l2.TimeGroupName))
         {
             // This item is already in the list.
             exists = true;
             break;
         }
     }

     if (exists = false)
         matchingItems.Add(l2);
 }
于 2012-07-11T15:45:08.340 に答える
0

リスト 1 に基づいてリスト 2 に対してクエリを実行したいということは理解しています。Linq はそのために非常に優れています。

したがって、次のようなものを書いた場合

//List1Element is a single element in the first list.  
List1Element = List1[i];

List2.Where(l2 => l2.TimeGroupName == List1Element.TimeGroupName).ToList();

それはあなたが達成しようとしていると私が思うことを達成するかもしれません。

List1 全体を一度に照合しようとしている場合は、すべての list1 要素を反復処理するか、Linq Join操作を調べることができます。

于 2012-07-11T15:41:06.067 に答える