在列表列表中找到重复的对象(使用linq?)

时间:2012-09-05 14:50:07

标签: c# linq list

我有一个列表,我用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的列表,用于“耗尽”和“累”,没有特定的顺序,获取此列表的最佳方法是什么?从此示例中可以看出,每个StatusLookup

可以有1个或多个DbmsReport

2 个答案:

答案 0 :(得分:1)

尝试将其展平,另外您可以根据需要添加where子句。

var r = from p in statusList
        from q in p
        select q;

答案 1 :(得分:1)

你能做到吗?

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

或者如果你想要一个或者条件(即Report = sprint,fight,你想要找到所有有冲刺或战斗的Lookup)那么

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