2016-11-16 8 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

はこれを試してみてください:

値、 null、空の文字列と、すべての空白文字列のすべての種類を問わずtratedされていることを確認します
var res=productImportList.GroupBy(f => String.IsNullOrWhiteSpace(f.BarCode) ? String.Empty : f.BarCode).Select(x=>x.First()); 

1

注文に関係しないコメントに基づいて、BarCode()の値に基づいて2つのクエリを作成し、それらを連結します。上記

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に多くのデータが含まれていて、2つのクエリを実行すると、パフォーマンスが向上します。私のウェブサイトでProductImportListに100万のデータが含まれていることがあります。 –

+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この回答は不合格です。あなたのために何かできることがありますか? –

関連する問題