2016-10-12 6 views
0

の間で共通の値を取得します。私はこのようなデータテーブルを持っている:DataTableの行

| Supplier | Product | Price | NewPrice | Category | Quality | 
|-----------|---------|-------|----------|----------|---------| 
| Supplier1 | Orange | 100 | 105  | Food  | Good | 
| Supplier2 | Orange | 110 | 130  | Food  | Good | 
| Supplier3 | Orange | 200 | 250  | Food  | Good | 

私は私がこれをどのように行うことができます

| Supplier | Product | Price | NewPrice | Category | Quality | 
|-----------|---------|-------|----------|----------|---------| 
| Supplier1 | Orange | 100 | 105  | Food  | Good | 
| Supplier2 | Orange | 110 | 130  | Food  | Good | 
| Supplier3 | Orange | 200 | 250  | Food  | Good | 
|-----------|---------|-------|----------|----------|---------| 
|   | Orange |  |   | Food  | Good | 

各列の共通の価値観と新しいDataRowを必要ですか?

答えて

0

私は次のように行うことができます、あなたのDataTableを保存する方法がわからないですが、LINQを使用して:あなたが最初のSystem.Data.DataSetExtensionsSystem.linq

var count = dt.AsEnumerable().GroupBy(r => r[0]).Where(gr => gr.Count() == dt.AsEnumerable().Count()).Count(); 
object result; 
if (count == 1) 
    result = dt.AsEnumerable().GroupBy(r => r[0]).Where(gr => gr.Count() == dt.AsEnumerable().Count()).First().Key; 
else 
    result = "";  //or null, depending on what you need 

resultへの参照を追加する必要があります

は値を示し0列目のすべての行に表示されます。それ以外の場合は空の文字列です。たとえば、r[0]の代わりにr[1]を使用すると、結果はOrangeと表示されます。

dtの名前をあなたのデータテーブルの名前に変更して試してみてください。シーケンスの空の例外がないことを確認するために、まずカウントをチェックします。私はこのロジックで自分自身を思い付くしていない

は、この回答からの参照を取っ: How to find duplicate record using Linq from DataTable

解説:同じ値でグループ彼らにすべての行のあなたの列の値に

まず使用GroupBy() 。次に、それぞれので、の合計行数がに等しいかどうかを確認します。これは、値がすべての行に表示されているかどうかを確認するのと同じです。成功した場合は値を見つけます。それ以外の場合は結果を空文字列またはnullに設定します。