Linq to Entities查询仅识别整数

时间:2013-02-28 02:04:55

标签: sql entity-framework linq-to-entities

我的应用是使用DbContext的EF 5.0 Code First。我一直试图使用Linq来操纵(过滤和排序)。我首先尝试将上下文加载到Local,如:

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

我没有收到任何错误,但忽略了字符串排序。 int排序有效。类似地,当我尝试设置我的绑定源时,比较字符串或日期的linq部分不起作用,但是当我使用整数时,它可以工作。我假设这些没有正确转换为SQL查询,但我无法弄清楚如何解决它们。我希望有一个正确的方向。

1 个答案:

答案 0 :(得分:0)

然而,Load()不会创建任何内容,它只需要一堆项目并将它们从底层源加载到您的上下文中。您不能对context.mytable强加排序,因为mytable不包含实际数据,它包含您将用于获取实际数据的部分查询。

要获得对UI的排序,您需要订购要绑定的列表,或者使用无序列表并将其包装在作业要应用排序的对象中。由于您使用的是Local,请使用后者并使用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>

scm是:

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

代码中的相同内容:

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

使用额外的图层来应用排序有一些优点。它允许您在不同的位置显示具有不同排序的相同列表,并且您可以添加/删除基础列表中的项目,而无需每次都手动应用排序。

你还应该看看CollectionView课程中有一些额外的花里胡哨,但我不会进入它,以减少信息过载。