【问题标题】:Orderby a HashSet in an Object in Linq在 Linq 的对象中按 HashSet 排序
【发布时间】:2010-01-07 23:27:27
【问题描述】:

我有一个包含多个连接的非常复杂的 Linq 语句,但我遇到了 orderby 语句的问题。

我想我可以将问题缩小一点,但如果需要会扩大。

首先我的对象具有以下属性:

myObject.ID这是一个基本的Int

myObject.BrandName这是我的HashSet<string>

我需要根据我是升序还是降序排序,使用最低或最高值按 BrandName 对我的对象进行排序。

【问题讨论】:

    标签: c# asp.net linq-to-objects


    【解决方案1】:

    所以你的意思是按集合中的最小值或最大值排序?幸运的是,这很容易——即使它的表现相当糟糕:

    orderby myObject.BrandName.Min()
    

    orderby myObject.BrandName.Max() descending
    

    (反之亦然,具体取决于您想要的顺序。)

    【讨论】:

    • 太棒了。我不知道我在挖掘时更喜欢什么... Linq 或 StackOverflow.com :-)
    【解决方案2】:

    这对你有用吗?

    // replace with mo.BrandName.Min() to sort the other way
    Func<MyObject, string> getBrand = mo => mo.BrandName.Max();
    
    var q = from myObject in myObjects
            let b = getBrand(myObject)
            orderby b
            select myObject;
    

    【讨论】:

    • 这里不需要使用“let”子句。您确实需要将其设为 Max() 或 Min() 而不是 Max 或 Min。
    • 我认为 OP 需要将语法作为更大表达式的一部分,在这种情况下,了解...显然不是...
    • 虽然对我没用,但可能对其他人有所帮助。感谢您的努力和信息。我不能 +1 你...因为我不知道你所拥有的是否有用:-)
    • @Clarence:它会——它基本上和我的一样。您仍然可以拥有Func&lt;MyObject, string&gt; 位并使用orderby getBrand(myObject) - 不需要let 子句,除非您在其他地方需要该值(当然,在这种情况下,您最好只找到一次)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    相关资源
    最近更新 更多