如何选择常用项目

时间:2011-11-05 19:47:25

标签: c# linq linq-to-objects

在C#上工作linq.I有一个列表要列出。从这个列表中我想得到常见的项目

List<SQLFrameWorkTableEntity> oParent = new List<SQLFrameWorkTableEntity>();

            List<List<SQLFrameWorkTableEntity>> oChild = new List<List<SQLFrameWorkTableEntity>>();
            oListParentTable = oList.Where(p => p.Parent == true).ToList();
            foreach (SQLFrameWorkEntity item in oListParentTable)
            {           

                oChild.Add(GetTableSchemaList(item, oParent));
            }

enter image description here 上图描述了我的oChild是怎样的。 现在这个 oChild 是列表 SQLFrameWorkTableEntity 。我想从 oChild 获取常用项目。如何获取它?如果有任何查询plz ask.Thanks提前

将List替换为List&gt; ,我写了下面的linq语法

 var r=oChild.Select(p => p.Select(x => p.Any(y => y.ColumnName == x.ColumnName))).ToList();

在这里,我知道所有列表项都是真的,这意味着我无法与列表进行比较列表。请帮我纠正这种语法。谢谢

1 个答案:

答案 0 :(得分:0)

所以你想找到GetTableSchemaList(item, oParent)生成的所有列表中出现的项目?我们假设是。

首先添加Distinct()(如果一个列表尚未明确):

oChild.Add(GetTableSchemaList(item, oParent).Distinct());

然后在foreach之后:

var count = oListParentTable.Count;
var r = oChild.SelectMany(i => i).GroupBy(i => i)
    .Where(g => g.Count() == count).SelectMany(i => i).Distinct();

当oChild中不同列表的数量为4时,想法是“公共项目”应该在展开的列表列表(SelectMany)中完全出现4次。