Как выбрать общие предметы - PullRequest
0 голосов
/ 05 ноября 2011

Работа над C # linq. У меня есть список к списку . Из этого списка я хочу получить общие элементы

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 . Как его получить? Если есть какие-либо вопросы, пожалуйста, спроситеЗаранее спасибо.

После замены List to List> я пишу нижеприведенный синтаксис linq

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

Здесь, в ri, все элементы списка истинны, что означает, что я не могу сравнить ссписок в список. Помогите мне исправить этот синтаксис. Спасибо

1 Ответ

0 голосов
/ 06 ноября 2011

То есть вы хотите найти элементы, которые встречаются во всех списках, созданных GetTableSchemaList(item, oParent)?Давайте предположим, что да.

Сначала добавьте Distinct() (если один список еще не определен):

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

Затем после foreach do:

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

Идея состоит в том, что "общие элементы" должны встречаться ровно, скажем, 4 раза в сглаженном списке списков (SelectMany), когда число отдельных списков в oChild равно 4.

...