2016-11-16 5 views
0

У меня есть столбец штрих-кода, который тип строки. Как группировать по столбцу штрих-кода, которые включают пустую строку как группу и другое значение, уникальны. Мой стол выглядит ниже.Как включить пустую строку в группу в linq?

table

productImportList.GroupBy(f => f.BarCode);//productImportList contains list of ProductImport Class Object List 
var res=productImportList.GroupBy(f => f.BarCode).Select(x=>x.First()); 

его результат как-то этого.

enter image description here

, но мне нужно для получения результата, как показано ниже.

enter image description here

спасибо.

+0

Что такое критерии, что записи нужно сделать для того, чтобы быть действительным? – Sayse

+0

да строка пуста –

+0

критерии похожи, если штрих-код дублируется, а затем выберите первую строку по умолчанию, и если штрих-код пуст, тогда он рассматривается как строка. –

ответ

0

Попробуйте это:

var res=productImportList.GroupBy(f => String.IsNullOrWhiteSpace(f.BarCode) ? String.Empty : f.BarCode).Select(x=>x.First()); 

Это позволит убедиться, что все виды ценностей, null, пустых строк и все пробельных струны trated одинаково.

1

На основе вашего комментария, что заказ не имеет значения, создайте 2 запроса на основе значения BarCode() и затем соедините их.

var productImportList = ... // your query to get all data 
// get all records with no BarCode 
var noBC = productImportList.Where(x => x.BarCode == null); 
// get the first record in each BarCode group 
var hasBC = productImportList.Where(x => x.BarCode != null).GroupBy(f => f.BarCode).Select(x=>x.First()); 
// concatenate the queries 
var result = noBC.Concat(hasBC); 

Примечание выше предполагает, что нет BarCode не означает его null (если его на самом деле пустая строка, то вы можете использовать .Equals(String.Empty))

+0

, но если productimportList содержит много данных, и мы выполняем два запроса, это возможно для производительности. на моем сайте иногда ProductImportList содержит 1 миллион данных несколько раз. –

+0

Только вы можете проверить это, и вы, вероятно, захотите индексировать поле «BarCode» –

+0

Но почему бы вы никогда не возвращали миллион строк в любом случае - вы не можете использовать столько данных в представлении. –

2

Так что вы хотите каждый отдельный вход с пустым штрих-кодом, чтобы в конечном итоге в результат. Трюк может быть, чтобы сделать пустые записи уникальным в группировке:

productImportList.GroupBy(f => string.IsNullOrWhiteSpace(f.Barcode) 
            ? Guid.NewGuid().ToString() 
            : f.Barcode) 
       .Select(x=>x.First()) 

Результат:

Barcode title 
10 abc 
    aaa 
15 bbb 
20 ccc 
    ddd 
    fff 
24 ggg 
48 hhh 
+0

@ljdhameliya Вы не ответили на этот ответ. Что я могу сделать для вас? –

Смежные вопросы