DistinctBy不工作在C#/ Visual Studio 2012

问题描述:

我正在使用DistinctBy返回一个不同的列表。它以某种方式不接受该方法。DistinctBy不工作在C#/ Visual Studio 2012

List<LastLocation> tempLast = details.DistinctBy(x => x.deviceID).ToList(); 

这是一个工作项目,前几天我在使用Visual Studio 2008年时,我迁移项目框架4.0和我目前使用Visual Studio 2012,突然这已经开始引起问题。 下面是正在使用的命名空间和引用的程序集列表。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using COMMON; 
using MySql.Data.MySqlClient; 
using System.Data; 
using System.Configuration; 
using System.Xml.Linq; 

我做错了什么?

+0

通过“不接受”你实际上表示的方法,你不能编译它。这是因为您可能已经删除了所需的使用语句,例如: 'using System.Linq;' 其中“导入”了扩展方法。我想你的包含的第一个问题与项目设置或某事有关,或者只是修复对正确程序集的引用。无法获得更多信息,很难说明确切的问题是什么 –

+0

DistinctBy不是标准Linq的一部分。既可以使用GroupBy + First,也可以从Morelinq获得实现 – adrianm

+0

然后为什么它在VS2008中工作? – writeToBhuwan

DistincyBy通过MoreLinq提供,而不是框架的一部分。检查你已安装并引用MoreLinq。

+0

从哪里可以参考MoreLinq? – writeToBhuwan

+0

您可以使用NuGet安装它(右键单击解决方案/项目并选择管理软件包)。 – Lloyd

+0

+1谢谢..!它说,我需要等待7分钟,将其标记为答案.. :) – writeToBhuwan

DistinctBy不是Linq的一部分。也许你错过了一个NuGet软件包MoreLinq,或者你没有包含你自己的扩展方法。

+0

+1谢谢..!真的有帮助。 – writeToBhuwan

试试这个:

details.Select(x => x.deviceID).Distinct().ToList(); 
+4

-1:这不等同。它只返回deviceID,而不是整个位置。一个等价的查询将是'details.GroupBy(x => x.deviceID).Select(x => x.First())。ToList()' –

确定这是一个有点晚了,但是你不需要安装任何NUGET包处理DistinctBy请求。只需添加下面的代码行就可以将其指向许多预安装的引用之一。

using Microsoft.Ajax.Utilities; 

一旦加入,你可以简单地把.DistinctBy(d => d.Name)在任何结束返回的集合,类似于下面的例子。

var someVariableName = _repositoryName.GetListOfData().DistinctBy(d => d.Name).ToList();