2012-09-05 106 views
0

我有我與LINQ創建包含狀態代碼對象列表的列表(使用LINQ):找到一個列表的列表中重複的對象

List<List<StatusLookup>> statusList = new List<List<StatusLookup>>(); 

foreach(var action in DbmsReport.Actions){ 
    statusList.Add((from stat in MyFactory.CreateQueryable<StatusLookup>() 
        where stat.ActionTypes.Contains(action) 
        select stat).ToList()); 
} 

我現在需要以某種方式解析這個statusList和找出所有在列表中的每個列表StatusLookup的對象,因此,例如:

DbmsReport.Actions = (sprint, fight); 

StatusLookup = ({ id = 0, text = "exhausted", ActionTypes = (sprint, fight) } 
       { id = 1, text = "tired", ActionTypes = (jog, sprint, fight) } 
       { id = 2, text = "rested", ActionTypes = (sleep) } 
       ); 

因此,在這種情況下,我需要得到一個包含StatusLookup在「透支」和「累」的一個列表中沒有特定順序,獲得此列表的最佳方式是什麼?從這個例子中可以看出,每個可以有1個或多於1個DbmsReport

+3

你一定要保持他們的名單-of-列表?如果你把它攤平到一個大名單怎麼辦?簡單的查詢然後 – n8wrl

+0

不,我不必把它列爲清單,請提供這個扁平列表的例子 –

+0

如果'DbmsReport.Actions =(spring,fight)'你想要所有的StatusLookup哪裏ActionTypes包含sprint *和*戰鬥或ActionTypes包含衝刺*或*戰鬥 –

回答

1

你不能只是這樣嗎?

var lookups= MyFactory.CreateQueryable<StatusLookup>() 
      .Where(x=> DbmsReport.Actions.All(y=>x.ActionTypes.Contains(y))).ToList(); 

,或者如果你想要一個或條件(即報告=衝刺,戰鬥,你想找到要麼衝刺所有查找或打),然後

var lookups= MyFactory.CreateQueryable<StatusLookup>() 
      .Where(x=> DbmsReport.Actions.Any(y=>x.ActionTypes.Contains(y))).ToList(); 
+0

完美,第一個例子是我在找的東西。謝謝。 –

+0

問題是當我嘗試上述時,我得到了「不支持指定的方法」。 NotSupportedException這可能與MyFactory是一個Nhibernate工廠有關...... –

+0

所以這確實結束了工作,我只是將'MyFactory.CreateQueryable ()'分開到它自己的變量,即'var allStatuses = MyFactory.CreateQueryable ()。ToList()'然後用'allStatuses'替換我們例子中的'MyFactory.Crea .....' –

1

試試這個來壓平它,另外你可以根據需要添加where子句。

var r = from p in statusList 
     from q in p 
     select q; 
相關問題