如何在 LINQ2SQL 中处理未知数量的订单

发布于 2024-11-29 21:16:38 字数 513 浏览 0 评论 0 原文

我正在使用 LINQ 来排序一些数据,但我有零个或多个要应用的 OrderBy 子句。

由于我不知道我有多少订单条款,所以我不能这样做:

var myItems = dataContext.MyItems
    .OrderBy(i => i.ColumnA)
    .ThenBy(i => i.ColumnB)
    .ThenBy(i => i.ColumnC)
    .ThenBy(i => i.ColumnD)
    // etc.

从逻辑上讲,我需要类似的东西:

var myItems = dataContext.MyItems;
foreach (var orderClause in myOrderClauses)
{
    myItems = myItems.SubOrderMagicallyBy(orderClause);
}

显然这是没有希望的,所以任何想法将不胜感激。

I'm using LINQ to order some data, but I have zero or more OrderBy clauses to apply.

As I don't know how many order clauses I have, I cannot do:

var myItems = dataContext.MyItems
    .OrderBy(i => i.ColumnA)
    .ThenBy(i => i.ColumnB)
    .ThenBy(i => i.ColumnC)
    .ThenBy(i => i.ColumnD)
    // etc.

Logically, I need something like:

var myItems = dataContext.MyItems;
foreach (var orderClause in myOrderClauses)
{
    myItems = myItems.SubOrderMagicallyBy(orderClause);
}

Obviously this is hopeless, so any ideas would be greatly appreciated.

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

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

发布评论

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

评论(1

猫瑾少女 2024-12-06 21:16:38

为什么它不能与 foreach 一起使用?
您只需要处理第一个 order 子句的特殊情况:

IQueryable<MyItem> myItems = dataContext.MyItems;
bool first=true;
foreach (var orderClause in myOrderClauses)
{
    if(first)
    {
        myItems = myItems.OrderBy(orderClause);
        first = false;
    }
    else
        myItems = myItems.ThenBy(orderClause);
}

这假设 myOrderClauses 的类型为 IEnumerable>>

Why doesn't it work with the foreach?
You just need to handle the special case of the first order clause:

IQueryable<MyItem> myItems = dataContext.MyItems;
bool first=true;
foreach (var orderClause in myOrderClauses)
{
    if(first)
    {
        myItems = myItems.OrderBy(orderClause);
        first = false;
    }
    else
        myItems = myItems.ThenBy(orderClause);
}

This assumes, that myOrderClauses is of type IEnumerable<Expression<Func<TSource, TKey>>>.

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