2012-11-21 51 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); 
} 

你的供應商應與應對,如果不是有一些其他的方式。