Linq - 当另一个列表中的值时,OrderBy id

时间:2012-01-12 19:05:18

标签: c# linq sql-order-by

我需要你的帮助。

让我们说:

public class myProduct
{
    public string Tags {get;set;} // Comma seperated values
}

List<myProduct> myProducts = WhatEver // Feeding the list products

List<long> capacity = WhatEverAlso // Feed the list long values from somewhere

现在,我想要做的是按容量订购myProducts列表。

所以,如果myProduct.Tags =“89,3,6” 和容量=“1,2,3,4,5,6”

首先出现的产品中包含1个,然后是2个等。

问题不是对它们进行排序,问题实际上是某些标签不包含容量值。

修改 例如,products.tags可以是“89,16,99” 所以它不包含任何容量值。 的 EDIT2: 我不需要过滤产品,只需订购它们。

EDIT3: 我开始使用var foo = myProducts.OrderBy(p => p.Tags.Split(',').Intersect(capacity).OrderBy(c => capacity).Any()); 我觉得我很接近,但我无法弄清楚剩下的。 :(

希望你理解我的问题,我的英语表达不是那么好: 随时可以向我询问任何其他信息。

1 个答案:

答案 0 :(得分:0)

问题并不完全清楚,但是这会让你走上正轨吗?

var ordered = 
    from p in myProducts
    let tags = p.Tags.Split(',').Select(long.Parse)
    let capIndices = 
        tags.Select(t => capacity.IndexOf(t))
        .Where(i => i >= 0)
    where capIndices.Any() // filter out products without capacity
    let capIndex = capIndices.Min()
    orderby capIndex
    select p;

按照capacity列表中任何标签的最早位置对产品进行排序。如果其{1}}列表中没有任何标记,则最终结果中不会包含产品。