LINQ:不同的和有序的

LINQ:不同的和有序的,linq,sql-order-by,distinct,Linq,Sql Order By,Distinct,我正在尝试使用LINQ(to EF)获得一个不同的列表,然后对其进行排序。我发现的所有示例都根据不同的值对结果进行排序。但我想把它放在不同的领域 示例:带有2个字段(canvasSize和canvasLength)的表 我找到的所有例子都给出了这种类型的答案。但它是按画布大小排序的,而我想按画布长度排序 我被卡住了。。。非常感谢任何提示 根据J.双向飞碟>附加信息: company canvasSize canvasLength abc 8x10 8 d

我正在尝试使用LINQ(to EF)获得一个不同的列表,然后对其进行排序。我发现的所有示例都根据不同的值对结果进行排序。但我想把它放在不同的领域

示例:带有2个字段(canvasSize和canvasLength)的表

我找到的所有例子都给出了这种类型的答案。但它是按画布大小排序的,而我想按画布长度排序

我被卡住了。。。非常感谢任何提示

根据J.双向飞碟>附加信息:

company  canvasSize  canvasLength

abc       8x10         8
d         8x10         8
e         10x10        10
f         10x10        10
g         40x40        40
我想在画布尺寸上有所区别。问题在于,排序时,其结果如下:

10x10
40x40
8x10  
我想要相同的结果集,但使用canvasLength排序,因此结果为:

8x10
10x10
40x40

我想你想要的可能是这样的:

var sizes = (from s in ent.competitors                         
             select new { s.canvasSize, s.canvasLength })
            .Distinct()
            .OrderBy(x => x.canvasLength);
更新

根据您问题中的额外信息,以下内容应满足您的要求:

var sizes = ent.competitors
               .Select(c => new {c.canvasSize, c.canvasLength})
               .Distinct()
               .OrderBy(x => x.canvasLength)
               .Select(x => x.CanvasSize)

那么,你想通过什么来区分它呢?如果你能提供一些样本数据和预期的结果,这将非常有帮助。那么,你想在结果中同时显示canvasSize和canvasLength,按canvasLength排序吗?你处理了多少数据?阻力最小的方法是在DB级别对列A执行orderby,选择两列并将它们放入内存,然后选择单个列B并在内存端使用distinct。写起来很简单。但是,如果有大量数据,它可能无法很好地扩展。(这假设数据库在使用Distinct时不保证保存顺序。如果保证,则坚持使用DB。)对于这种特殊情况,当字段相互依赖时,这应该起作用,因为If
canvasSize
是相同的,
canvasLength
也是相同的。如果它们独立变化,这将是一个问题。@JoachimIsaksson-同意,但您只需在
Distinct()
调用中添加一个键选择器。@AndrewCooper没有
Distinct()
的键选择器,至少在标准IQueryable上是这样。@JoachimIsaksson-完美!我不知道你们在现实生活中是什么样子。。。但在堆栈溢出的面纱后面,你们都很漂亮。。。我花了好几个小时自己研究这个。我在SO上发帖,在10分钟内得到了完美的回复。。。谢谢大家!@NetMage
OrderBy()
可以留在
IQueryable
部分在服务器上执行,
AsEnumerable().Distinct()
将在保留排序顺序的同时给出不同的结果。
var sizes = (from s in ent.competitors                         
             select new { s.canvasSize, s.canvasLength })
            .Distinct()
            .OrderBy(x => x.canvasLength);
var sizes = ent.competitors
               .Select(c => new {c.canvasSize, c.canvasLength})
               .Distinct()
               .OrderBy(x => x.canvasLength)
               .Select(x => x.CanvasSize)