我有一个像这样的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 |
我需要一个具有每列常用值的新DataRow
| 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 |
我该怎么做?
答案 0 :(得分:0)
我不确定如何存储数据表,但使用linq可以按如下方式完成:
您需要先添加对System.Data.DataSetExtensions
和System.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[1]
代替r[0]
的情况下,结果将显示为Orange
。
使用您的数据表名称重命名dt
并尝试一下。我首先检查计数,以确保序列为空时没有异常。
我自己没有提出这个逻辑,参考了这个答案: How to find duplicate record using Linq from DataTable
说明:
首先在所有行的列值上使用GroupBy()
按相同值对其进行分组。然后检查每个计数是否等于总行数,这相当于检查值是否出现在所有行中。如果成功,我们会找到您的值,否则将结果设置为空字符串或 null 。