2012-09-06 147 views
1

我在嘗試進行強制轉換或進行正確的轉換時遇到了一些麻煩。 我IQueryable<T>類型T是一個類的查詢:隱式轉換IQueryable <IGrouping <string, T>>類型IQueryable <T>

var query = (from x in query 
      group x by US.FirstName into g 
      select g).Distinct(); 

我收到此錯誤:

無法隱式轉換類型System.Linq.IQueryable<System.Link.IGrouping<string,T>>System.Linq.IQueryable<T> >>

我想要什麼實際上執行的操作是返回查詢的唯一值。

+0

唯一值是什麼意義?只有獨特的名字?如果你能給我們一些樣本數據和期望的輸出,那真的很有幫助。 –

+0

這個查詢在沒有Distinct()的情況下聲明的唯一值會返回一些重複的數據。示例數據:Jon:激活應用程序,jon:關閉應用程序,Jon:再次打開應用程序。我想要做的只是返回Jon的一個單一動作,而不是Jon的整個動作。 – Francky

+0

@Francky是的,但是您的所有示例數據作爲一個整體已經是唯一的。然而,它們在名字「Jon」的背景下並不是獨一無二的。你只是試圖獲得這個動作列表中所有不同名稱的列表?你的例子中的哪些項目會被認爲是重複的,並且期望使用「Distinct」來移除。 – mclark1129

回答

1
vQuery = vQuery.GroupBy(x => x.FirstName) 
     .Select(g => g.First()); 

但這將是相當隨意:你應該做一個OrderBy或 「您的」 語法發現了一個OrderByDescending

.Select(g => g.OrderBy(x => x.WhatEverYouWant).First()) 

vQuery = (from US in vQuery 
group US by US.FirstName into g 
select g.First()) 
+0

使用.first()方法它將返回相同的錯誤 – Francky

+0

@Francky Hmmm,不用於查詢語法。這不是更好嗎? –

+0

最後一個是正確的,似乎工作正常。感謝您的支持@Mike C,Jon Skeet和你Raphael。我想我會喜歡這個stackoverflow。 – Francky

0

當您執行LINQ你居然分組返回IGrouping<TKey, TValue>的集合。您正嘗試將此結果返回到您爲原始查詢vQuery定義的變量中,該變量的類型爲IQueryable<T>。您需要將您的LINQ查詢的結果放入一個類型爲IGrouping<TKey, TValue>的單獨變量:

var groupedValues = (from US in vQuery 
        group US by US.FirstName into uniqueFirstName 
        select uniqueFirstName).Distinct(); 
+0

Mike C, var類型只有一半的技巧,我之前嘗試過。事情是vQuery已經很強類型。它用在如下的方法中:private void Filter(BackgroundWorker bw,ref IQueryable vQuery)\t \t {} – Francky

+0

我意識到'vQuery'是強類型的,技術上'groupedValues'在該行執行後是強類型的。你的問題是'vQuery'和你的查詢結果是兩種不同的類型,並且不能互換。 – mclark1129

相關問題