Как мне выполнить запрос linq, чтобы найти поля в наборе данных, которые присутствуют в каждой записи набора? - PullRequest
3 голосов
/ 09 ноября 2011

У меня есть набор данных XML с 10K записями, каждая из которых содержит набор полей.

Я хотел бы знать, какие поля должны быть нулевыми, а какие могут быть ненулевыми в схеме базы данных, соответствующей набору данных.

Предлагает ли linq способ создать большое пересечение?

Пример:

<set>
 <item>
  <a/>
  <foo />
  <b/>
  <c/>
 </item>
 <item>
   <a/>
   <foo />
   <b/>
   <c/>
  </item>
 <item>
   <a/>
   <b/>
 </item>
 <item>
   <a/>
   <foo />
   <b/>
  </item>
</set>

Прототип:

string[] CommonFieldNames(XElement[] elements)
{
  // ...
}

Желаемый результат:

{ "a", "b" }

Ответы [ 2 ]

3 голосов
/ 09 ноября 2011

В приведенном ниже коде selectedValue - это столбцы, отличные от NULL.

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

Вы можете использовать GroupBy и сравнить размер группы с общим количеством элементов:

XDocument doc = XDocument.Parse("<set><item><a/><foo /><b/><c/></item><item><a/><foo /><b/><c/></item><item><a/><b/></item><item><a/><foo /><b/></item></set>");
var items = doc.Document.Element("set").Elements("item");
var commonElementNames = items.SelectMany(x => x.Elements()) // Get all immediate children
                              .GroupBy(x => x.Name) // Group by name
                              .Where(g => g.Count() == items.Count()) // Filter for only those which show in every group.
                              .Select(g => g.Key.LocalName) // Select just the element names
                              ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...