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 回答