LINQ指定多个条件

时间:2014-05-01 14:20:18

标签: c# linq

如何在下面的LINQ中指定多个条件?

if (Books.Select(x => x.BookName).Count() !=
    Books.Select(x => x.BookName).Distinct().Count())
{
    //Todo
}

我想指定一些像这样的东西:

if (Books.Select(x => x.BookName && x.price).Count() !=
    Books.Select(x => x.BookName && x.price).Distinct().Count())
{
    //Todo
}

2 个答案:

答案 0 :(得分:2)

您无需选择第一次计数。您可以使用匿名类型获取第二个计数。这将获得不同书籍名称和价格的数量:

if (Books.Count() != Books.Select(x => new { x.BookName, x.price}).Distinct().Count())
{
    //Todo
}

答案 1 :(得分:2)

因此,要回答您的问题,请将每个项目投影为匿名类型。

但是,为了避免多次迭代源数据(如果Book表示数据库查询,这尤其成问题),并且为了避免重复执行投影,您可以改为使用GroupBy

bool areDuplicatedBooks = Books.GroupBy(x => new{x.BookName, x.price})
    .Where(group => group.Count() > 1)
    .Any()