我想出了一個簡單的例子,希望能夠說明我的目標。我目前有一種方法返回一種排序「排名」它並不複雜,但它不會轉換爲SQL。性能很糟糕,因爲它全部在內存中完成,我試圖提高速度。在Linq創建一個排序表達式方法
public class Something
{
DateTime Date {get; set;}
// ...
public int SortRank(Sort sort)
{
if (sort == Sort.Newest)
{
return -Date.Ticks;
{
else if (sort == sort.Oldest)
{
return Date.Ticks;
}
}
}
enum Sort
{
Newest,
Oldest
}
using (Context db = new Context()
{
var q = db.GetTable<Something>()
.OrderBy(x=> x.SortRank(Sort.Newest));
}
SortRank()
目前還沒有轉換爲SQL所以我想將它轉化成一個表達式,以便它可以在數據庫中進行評估。做這個的最好方式是什麼?是的,我知道我可以在匿名lambda內實現這個內聯,但我更關心如何生成一個表達式。
更好的方法是讓你的'SortRank'返回'IOrderedQueryable',並將'OrderBy'或'OrderByDescending'附加到'IQueryable '傳遞給它。 –
dasblinkenlight
2012-02-23 04:25:24
DateTime沒有TotalSeconds屬性。你究竟想達到什麼目的?它看起來像你試圖通過Date屬性排序;如果是這種情況,那麼只需按日期屬性排序,根據需要調用OrderBy或OrderByDescending。 – phoog 2012-02-23 07:42:23
@phoog:我更新了我的問題,使用Ticks而不是TotalSeconds。 「是的,我知道我可以在匿名lambda內部實現這個內聯,但我更關心如何生成表達式。」 – Mark 2012-02-24 04:15:16