2011-05-26 166 views
2

在調試,我得到LINQ查詢 - 如何排序?

m_tableContext.TemplateTables.OrderBy(A => a.id)表達式不能包含lambda表達式

private readonly TamplateTableContext m_tableContext = new TamplateTableContext(); 

m_tableContext.Load(m_tableContext.GetTemplateTableQuery());  

lbTemplateTable.DataContext = m_tableContext.TemplateTables.OrderBy(a => a.id); 

如何排序?

+0

OrderBy()期望什麼參數? – DaveShaw 2011-05-26 21:22:36

+0

我需要從ID排序(4,3,2,1) – Mediator 2011-05-26 21:32:24

回答

0

如果這是一個方法調用,它不會工作。 Silverlight的調用是異步的,你必須爲負載提供方法的回調,使得其完成時,它轉儲到一個新的方法....

private readonly TamplateTableContext m_tableContext = new TamplateTableContext(); 

m_tableContext.Load(m_tableContext.GetTemplateTableQuery(),onLoadOperationCompleted);  


public void onLoadOperationCompleted(LoadOperation<TemplateTable> lo) 
     { 
      if (!lo.HasError) 
      { 
       lbTemplateTable.DataContext = 
        new ObservableCollection<TemplateTable>(lo.Entities.OrderBy(a => a.id)); 
      } 
} 

它是一種人爲的例子。我使用MVVMLight和一個ServiceLocator模式,所以我向你展示的並不是真的在上下文中,因爲它看起來像你可能實際上在代碼背後做了所有事情......但我真的只是試圖告訴你如何做回調。

+0

RoomsContext.Load(RoomsContext.GetTableQuery(),LoadBehavior.MergeIntoCurrent,onLoadOperationCompleted,new object()); - 錯誤... – Mediator 2011-05-28 08:20:44

2

目前的代碼很難說清楚。下面的例子使用相同的OrderBy表達式,它編譯並運行正常。

public class A { public int ID; } 

public static void Test() 
{ 
    List<A> listA = new List<A> {new A {ID=7}, new A {ID=2}, new A {ID=16}}; 

    var query1 = from x in listA orderby x.ID select x; 
    var query2 = (from x in listA select x).OrderBy(a => a.ID); 

    foreach(var x1 in query1) Console.WriteLine("{0}", x1.ID); 
    foreach(var x2 in query2) Console.WriteLine("{0}", x2.ID); 
} 

錯誤您可能實際上來自關於關鍵數據類型的信息不足。 This討論可能會幫助你。

更新:?! 啊,這是在調試,在調試模式,而不是調試目標,是... 如果你想看到的結果快速手錶或即時窗口 - 它的預期誤差。這並不意味着代碼有問題,只是該調試器不喜歡lambda表達式。

+0

DK,謝謝,但這並沒有幫助我。我不好讀\寫英文。對此我無法理解討論的意義。你的榜樣沒有幫助。 – Mediator 2011-05-26 21:17:46

+0

@simply denis,這個例子只是爲了驗證你的OrderBy()語法是否正確。接下來的問題是DaveShaw所問的:OrderBy中的參數是什麼,如果編譯器可以告訴a.id的類型? – 2011-05-26 21:50:49

+0

DK,id - is type Int32 – Mediator 2011-05-26 23:02:35

1

您無法在運行時檢查Lambda表達式。他們需要編譯,即使在運行時更改包含lambda(不僅僅是lambda本身)的方法,也需要重新編譯。