2

我在双重类型的数据视图中有一个列。我必须检查列中的所有值是否彼此不同。

有没有办法通过 linq 做到这一点?

4

4 回答 4

2

如果您想比较浮点类型,我真的建议您IEqualityComparer<T>在覆盖Equals()方法的位置定义您自己的类型,以指定相等的度量,因为浮点数不容易比较。

如果您比较的值来自某些计算,那么正确比较它们只是另一个原因,否则您看到的数字 2 可能与另一个数字 2 不匹配,因为它是 2.000000001 左右。

因此,使用以下 LINQ 查询

double[] items = new[] { 1d, 2d, 3d };
var dups = items.GroupBy(i => i, new MyDoubleComparer())
                .Where(g => g.Count() > 1)
                .Select(g => g.Key);

与您自己的比较器。您可以指定它应该有多精确。

class MyDoubleComparer : IEqualityComparer<double>
{
    public bool Equals(double x, double y)
    {
        // your comparing logic here
    }

    public int GetHashCode(double obj)
    {
        throw new NotImplementedException();
    }
}

有关如何比较浮点的灵感,请在此处此处导航。

于 2013-10-03T11:04:00.003 回答
1
listOfItems.Distinct().Count() == listOfItems.Count

假设 listOfItems 是List<double>

于 2013-10-03T11:52:05.770 回答
0
var distinctValues = view.ToTable(true, "YourColumn");
if(distinctValues.Rows.Count == view.Count)
  //Column values are same
于 2013-10-03T10:52:41.810 回答
0

您可以尝试查找重复项:

int[] listOfItems = new[] { 4, 2, 3, 1, 6, 4, 3 };
var duplicates = listOfItems
    .GroupBy(i => i)
    .Where(g => g.Count() > 1)
    .Select(g => g.Key);

如果重复项包含值,则列中的所有值彼此没有区别。

于 2013-10-03T10:49:42.500 回答