在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));
}
上图描述了我的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();
在这里,我知道所有列表项都是真的,这意味着我无法与列表进行比较列表。请帮我纠正这种语法。谢谢
答案 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次。