2012-02-17 118 views
0

我有一個基本的LINQ查詢,看起來像下面這樣:LINQ的GroupBy - 不能隱式轉換類型

var results = from x in context.MyEntities 
       where (x.CustomerName != null) 
       select new Customer() 
       { 
       CustomerID = x.CustomerID, 
       FirstName = x.FirstName, 
       LastName = x.LastName, 
       Gender = x.Gender, 
       BirthMonth = x.BirthMonth 
       }; 

results = results.GroupBy(x => x.Gender); 
results = results.GroupBy(x => x.BirthMonth); 

bool onlyShowKnownGenders = GetWhetherToShowOnlySetGenders(); 
if (onlyShowKnownGenders) { 
    results = results.Where(x => ((x.Gender == 1) || (x.Gender == 2))); 
} 

如果我註釋掉兩個「的GroupBy」行,我的代碼工作正常。但是,我現在需要對結果進行分組。當我包含兩條「GroupBy」行時,我收到一條錯誤消息:

不能將類型'System.Linq.IQueryable>'隱式轉換爲'System.Linq.IQueryable'。一個明確的轉換存在(你是否缺少演員?)

我的問題是,我不知道如何在這種情況下演員演員。有人可以幫我嗎?

謝謝!

+0

爲什麼你需要將結果分組?這是爲了訂購,還是你需要每個組的1個客戶? – Jimmy 2012-02-17 14:43:33

回答

1

問題在於,在您通過組呼叫某個組之後,您不能獲得(在本例中)客戶的可枚舉。你找回了一個可以枚舉的組。

一組客戶沒有BirthMonth屬性。

你究竟想在這裏做什麼?

這是你想要的嗎?

var results1 = results.GroupBy(x => x.Gender); 
var results2 = results1.Select(group => group.GroupBy(x => x.BirthMonth)); 

這會給你一組結束。 (我也納入了dasblinkenlight的答案,你不能重複使用相同的變量,因爲類型是不同的)。

1

首先,回答你的「如何在這種情況下演員」的原始問題:答案是你不能這樣做,因爲你使用的是匿名類型。

您看到的錯誤是由於隱式鍵入的results變量與分組結果不兼容。試試這個:

var results1 = results.GroupBy(x => new {x.Gender, x.BirthMonth}); 

您將需要通過,太超前組使用if (onlyShowKnownGenders)塊,因爲GroupBy產生的IQueryableIQueryable組的記錄,而不是記錄本身。

相關問題