2013-08-20 113 views
1

我正在使用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

回答

3

DistincyBy通過MoreLinq提供,而不是框架的一部分。檢查你已安裝並引用MoreLinq。

+0

從哪裏可以參考MoreLinq? – writeToBhuwan

+0

您可以使用NuGet安裝它(右鍵單擊解決方案/項目並選擇管理軟件包)。 – Lloyd

+0

+1謝謝..!它說,我需要等待7分鐘,將其標記爲答案.. :) – writeToBhuwan

3

DistinctBy不是Linq的一部分。也許你錯過了一個NuGet軟件包MoreLinq,或者你沒有包含你自己的擴展方法。

+0

+1謝謝..!真的有幫助。 – writeToBhuwan

-2

試試這個:

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

-1:這不等同。它只返回deviceID,而不是整個位置。一個等價的查詢將是'details.GroupBy(x => x.deviceID).Select(x => x.First())。ToList()' –

7

確定這是一個有點晚了,但是你不需要安裝任何NUGET包處理DistinctBy請求。只需添加下面的代碼行就可以將其指向許多預安裝的引用之一。

using Microsoft.Ajax.Utilities; 

一旦加入,你可以簡單地把.DistinctBy(d => d.Name)在任何結束返回的集合,類似於下面的例子。

var someVariableName = _repositoryName.GetListOfData().DistinctBy(d => d.Name).ToList(); 
相關問題