2012-09-05 74 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; 
相关问题