将 OrderBy 与自定义 IComparer 和 SubSonic 结合使用

发布于 2024-08-10 09:18:22 字数 726 浏览 11 评论 0原文

我试图在 SubSonic IQueryable 上使用自定义 IComparer 调用 OrderBy() ,如下所示:

IQueryable<FooObject> sortedFoos = 
  FooObject.All()
    .OrderBy(f => f, new FooObjectComparer());

但是,当我尝试枚举 >sortedFoos 或使用它创建 PagedList,我收到 System.Exception:“不支持类型 MemberInit 的 LINQ 表达式节点”。

下面是 FooObjectComparer 的实现:(

public class FooObjectComparer : IComparer<FooObject>
{
  public FooObjectComparer() {}

  public int Compare(FooObject x, FooObject y)
  {
    return x.MyProperty.CompareTo(y.MyProperty);
  }
}

这是一个用于调试目的的简单实现。实际实现会更复杂)。

我在这里缺少什么?

I am trying to call OrderBy() using a custom IComparer on a SubSonic IQueryable like so:

IQueryable<FooObject> sortedFoos = 
  FooObject.All()
    .OrderBy(f => f, new FooObjectComparer());

However when I then try to enumerate over sortedFoos or create a PagedList<FooObject> using it, I get a System.Exception: 'The LINQ expression node of type MemberInit is not supported'.

Here is the implementation for FooObjectComparer:

public class FooObjectComparer : IComparer<FooObject>
{
  public FooObjectComparer() {}

  public int Compare(FooObject x, FooObject y)
  {
    return x.MyProperty.CompareTo(y.MyProperty);
  }
}

(This is a simple implementation for debugging purposes. The actual implementation will be more complex).

What am I missing here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

左耳近心 2024-08-17 09:18:22

您缺少的是 SubSonic 无法反映您的比较运算符并弄清楚如何将其转换为 SQL。也许您最好的选择是首先将对象拉入内存(基于任何标准),然后使用比较器对它们进行排序。

What you're missing is that SubSonic can't reflect on your comparison operator and figure out how to turn it into SQL. Probably your best bet is to pull the objects first into memory (based on whatever criteria) then order them with your comparer.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文