2013-02-28 127 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有一些额外的花里胡哨的类,但我不会进入它,以减少信息过载。