如何在列表中映射ID?

时间:2012-07-11 15:28:35

标签: c# .net-2.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

2 个答案:

答案 0 :(得分: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);
 }

答案 1 :(得分: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操作