2012-11-21 52 views
0

我目前使用Linq从我的数据表中检索不同值的列表。然后,我循环遍历列表,并再次调用linq查询来检索第一个列表中每个值为 的值的列表。Linq查询与SortedList <int,列表<int>>

_keyList = new SortedList<int, List<int>>(); 
var AUGroupList = ProcessSummaryData.AsEnumerable() 
        .Select(x => x.Field<int>("AUGroupID")) 
        .Distinct() 
        .ToList<int>(); 
foreach (var au in AUGroupList) 
{ 
    var AUList = ProcessSummaryData.AsEnumerable() 
         .Where(x => x.Field<int>("AUGroupID") == au) 
         .Select(x => x.Field<int>("ActivityUnitID")) 
         .ToList<int>(); 
    _keyList.Add(au, AUList); 
} 

然后,我将该值与相应的第二个列表一起添加到排序列表中。 如何将上述两个查询合并到一个Linq查询中,以便我不必单独调用它们?

回答

2

你应该能够做这样的事情:

var groupQuery = from d in ProcessSummary.AsEnumerable() 
       group d by new { Key = d.Field<int>("AUGroupID") } into g 
       select new { GroupID = g.Key, Values = g.Distinct().ToList() }; 

然后你就可以遍历groupQuery和填充排序列表。 Key属性将包含组标识,并且Values属性将具有明确的值列表。

+0

非常感谢!奇迹般有效。 –

1

你试过吗?

var _keyList = new SortedList<int, List<int>>(); 
var AUGroupList = ProcessSummaryData.AsEnumerable() 
        .Select(x => x.Field<int>("AUGroupID")) 
        .Distinct() 
        .Where(x => x.Field<int>("AUGroupID") == au) 
        .Select(x => x.Field<int>("ActivityUnitID")) 
        .ToList<int>(); 
    _keyList.Add(au, AUList); 
} 

你的供应商应与应对,如果不是有一些其他的方式。