【问题标题】:late binding in linqlinq中的后期绑定
【发布时间】:2010-08-26 23:48:25
【问题描述】:

我有一个针对集合的简单 LINQ 查询。

   Dim oList = From w In Os
                Order By w.ClassTitle Descending
        Select w

我希望能够做的是传递到它,无论它是下降还是上升。我不知道该怎么做。

另外,如果我在这里有一个 where 子句.. 说

where w.ClassTitle = "Test"

如何进行“测试以便我可以将其传递给 LINQ 查询。

谢谢 香农

【问题讨论】:

    标签: vb.net linq linq-to-sql


    【解决方案1】:

    我不认为你可以将它“传递给”这个查询,但是你可以做常规查询

    var oList = from w in Os
                select w
    

    然后当用户采取一些行动时,你可以简单地在那个事实之后下订单。

    oList.OrderBy(o => o.ClassTitle)
    

    oList.OrderByDescending(o => o.ClassTitle)
    

    更新:

    就后期绑定而言,您可以编写一个执行 Where 子句的方法。也许使用扩展方法可能会奏效。我对 C# 比较熟悉,所以我的语法可能有点不妥

    public static IEnumerable<Os> ExecuteWhere (this Table<Os> table, Expression<Func<Os, bool>> predicate)
    {
        return table.AsQueryable<Os>().Where(predicate);
    }
    

    然后这样称呼它:

    oList.ExecuteWhere(a => a.ClassTitle == "Test")
    

    【讨论】:

    • 适用于排序.. 现在尝试找出 NetSides 方法来后期绑定 where
    • 想知道您是否可以进一步解释一下。在 vb 中,我需要使用 olist.orderby(function(o) o.classtitle) 我正在尝试谷歌搜索并找出函数部分的含义以更好地理解这一点..但运气不佳。很想更好地理解它的含义。谢谢香农
    • 没关系..我想我找到了答案...msdn.microsoft.com/en-us/library/bb534966.aspx。类型:System.Func(Of TSource, TKey) 从元素中提取键的函数......
    • 是的,这应该可以满足您的需求。 VB 中的语法看起来确实很不一样,我明白你为什么感到困惑了。
    【解决方案2】:

    使用委托语法。例如;

    Dim oList = Os.Where(....).OrderBy(...)...
    

    【讨论】:

    • 虽然我同意使用扩展方法而不是 Linq 语法可以使这类问题更清晰,但我认为您并没有真正解决他的问题。
    • 因为查询必须选择是使用 OrderBy 还是 OrderByDescending,这可能无法解决问题。
    • 我看到基本上他的代码语法有问题,用这个语法,比较清楚,容易理解,他自己解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 2016-12-15
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多