我使用LINQ到EF,並具有以下LINQ查詢分組:使用LINQ我怎麼有一個「計算字段」
var results = (from x in ctx.Items
group x by x.Year into decades
orderby decades.Count() descending
select new { Decade = decades.Key, DecadeCount = decades.Count() });
所以這種得到我的地方,我想,因爲我得到了按年分解的項目和當年的項目數。 (即2001 - 10,1975 - 15,2005 - 5,1976 - 1)我真正想做的事情是將它們分解十年(即2000年代 - 15年代,1970年代 - 16年代)。
如何在Linq語句的group子句的「by」部分中包含「計算字段」。我想我要的是基本一樣的東西:
var results = (from x in ctx.Items
group x by (x => x.Year.Value.ToString().Substring(0, 3) + "0s") into decades
orderby decades.Count() descending
select new { Decade = decades.Key, DecadeCount = decades.Count() });
或者更一般的語法,這樣我可以做一些更復雜的評價/計算由上做組。有任何想法嗎?
編輯(更新):
(X => x.Year.Value.ToString()子串(0,3)+ 「0」) - 不工作 - 「LINQ實體不識別方法'System.String ToString()'方法,並且此方法不能轉換爲存儲表達式。「
(x.Year/10 * 10) - 功能作品(謝謝) - 唯一的 「問題」 是, 'S' 是不是在年底(即1970年對20世紀70年代)
有無論如何要把一個函數放在by子句中? (x.Year)轉換成數十年......或... x => x.Year.Value.ToString()。子字符串(0,3)+「0s」?有一些技巧(如調用函數或使用lambda表達式)會很好,這樣我就可以覆蓋任何我能想到的情況。
再次感謝大家的幫助。
號,一組是已經IEnumerables的IEnumerable(如IGrouping延伸IEnumberable)。這裏不需要SelectMany。 – 2008-12-21 08:09:18