2013-02-28 126 views
0

我的應用程序是EF 5.0 Code First using DbContext。我一直在嘗試使用Linq來操縱(過濾&排序)。我第一次嘗試加載上下文到本地,如:Linq to Entities Query Only Recognize Integers

context.mytable.orderby(function a a.somestring).thenby(function b d.someint).load 

我沒有得到任何錯誤,但字符串排序被忽略。 int類型的工作。同樣,當我嘗試設置我的綁定源linq部分比較字符串或日期不起作用,但當我使用整數它的作品。我假設這些不是正確轉換爲SQL查詢,但我無法弄清楚如何解決它們。我希望在正確的方向上提供一點意見。

+0

您是否只需要按照特定順序在UI中顯示數據? – 2013-02-28 05:41:21

+0

您能否給我們一些示例數據以向我們展示訂購問題? – IronMan84 2013-02-28 14:42:55

+0

馬諾斯 - 是的。我使用Where子句和Order子句來獲取要顯示給用戶的數據。我在Where子句中遇到同樣的問題。 – user1626137 2013-02-28 15:17:42

回答

0

然而,Load()不會創建任何東西,它只需要一堆項並將它們從底層源加載到上下文中。您不能在context.mytable上施加排序,因爲mytable不包含實際數據,它持有您將用於獲取實際數據的部分查詢。

要訂購您的用戶界面,您需要對您要綁定的列表進行排序,或者使用無序列表並將其包裝到其作業要應用排序的對象中。由於您使用的是本地版,請使用後者並使用CollectionViewSource

下面是WPF中CollectionViewSource的一個示例。它綁定到我想要的順序顯示的無序列表DataContext的財產StateOrProvinces:

<UserControl.Resources> 
    <CollectionViewSource x:Key="stateOrProvinceViewSource" Source="{Binding Path=StateOrProvinces}" > 
     <CollectionViewSource.SortDescriptions> 
      <scm:SortDescription PropertyName="Name" /> 
     </CollectionViewSource.SortDescriptions> 
    </CollectionViewSource> 
</UserControl.Resources> 

與供應鏈管理之中:

xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase" 

代碼同樣的事情:

CollectionViewSource orderedView = new CollectionViewSource() 
    { 
     Source = StateOrProvinces, 
    }; 
orderedView.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending)); 

使用額外的層來應用排序有一些優點。它允許您在不同地點以不同順序顯示相同列表,並且可以從基礎列表中添加/刪除項目,而無需每次都手動應用排序。

你也應該看看CollectionView有一些額外的花裏胡哨的類,但我不會進入它,以減少信息過載。