2009-11-07 62 views
2

我使用這個方法有麻煩:問題使用排序依據與實體框架和ObjectContext.CreateQuery(T)

public ObjectQuery<E> DoQuery(string columnName, int maximumRows, int startRowIndex) 
{ 
    var result = (ObjectQuery<E>)_ctx.CreateQuery<E> 
    ("[" + typeof(E).Name + "]").OrderBy(/*???*/).Skip<E>(startRowIndex).Take(maximumRows); 

    return result; 
} 

我不知道有什麼需要在OrderBy節去。我試過把.OrderBy遺漏掉,但最終給我一個錯誤,說它需要排序,這樣我才能取一定數量的行。

我想按ID字段排序。在一種情況下,我將實體名稱作爲行,此實體的ID被命名爲RowID

有誰知道我可以通過ID字段命令?

注意:這是一個使用實體框架的通用存儲庫。傳入的columnName是我想要排序的列,但它可能只是ID字段的名稱。

回答

3

當我創建我的存儲庫時,我認爲每個EntityObject都有ID屬性。然後,我創建庫:

public class Repository<T> : IRepository<T> where T : EntityObject, IBasicEntityInfo 

IBasicEntityInfo:

public interface IBasicEntityInfo 
{ 
    int ID { get; set; } 
} 

然後

OrderBy(a => a.ID) 

自動生成EntityObject類沒有實現IBasicEntityInfo接口,但我用T4生成:

public partial class User : IBasicEntityInfo ,ILastModificationInfo 
public partial class Project : IBasicEntityInfo ,ILastModificationInfo 
public partial class Group : IBasicEntityInfo ,ILastModificationInfo 
public partial class GroupUser : IBasicEntityInfo 
public partial class OperationSystem : IBasicEntityInfo ,ILastModificationInfo 

T4很簡單:

<#@ template language="C#" #> 
<#@ output extension="cs" #> 
<#@ import namespace="System.Collections.Generic" #> 
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Web; 

<# 
    String[] classNames = new String[] {"User","Project","Group","GroupUser","OperationSystem","TaskType","Priority","Severity","Status","Version","Platform","Task","TaskUser","Attachment","Comment","Setting"}; 
#> 
namespace CamelTrap.Models 
{ 
<# foreach(String className in classNames) { #> 
    public partial class <#= className #> : IBasicEntityInfo 
    { 
    } 
<# } #> 
} 

進行這樣的假設解決其他問題也是一樣,從創建複雜的表達式救了我。

+1

這在很多方面都很有用(我們幾乎完成同樣的事情),但實際上並沒有幫助解決他遇到的問題。 – 2009-11-09 13:36:01

+0

它確實解決了這個問題,因爲你可以使用OrderBy(a => a.ID)。我的存儲庫通過實現IBasicEntityInfo知道每個對象都具有ID屬性。 – LukLed 2009-11-09 14:36:27

+0

當然,你的解決方案稍微簡單:) – LukLed 2009-11-09 14:37:31

4

你只是做:

.OrderBy("it.Id") 

...意味着你的ID字段被稱爲 「ID」。在查詢生成器中,「it」表示實體。請參閱this page以供參考。