2012-01-12 32 views
1

我需要你的帮助。Linq - OrderBy id当在另一个列表中的值

让说:

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 

现在,我想做的事是为了通过能力我的产品清单。

所以,如果一个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()); 我觉得IM接近,但我不能想出休息。 :(

希望你明白我的问题,我的英语表达不是很好:\ 随时问我任何额外信息

+1

你怎么知道哪些人做和没有能力?你可以添加容量属性到你的MyProduct类吗?我感觉IEnumerable <>。Join()将成为解决方案的一部分,但是如果没有更多的信息,我就无法分辨出来。 – itsme86 2012-01-12 19:09:01

+1

我很确定你需要一些foreach {}来做。 – 2012-01-12 19:09:53

+0

@ itsme86 - 将问题添加到示例中 – Dementic 2012-01-12 19:11:30

回答

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列表标签的最早位置,这定购产品。如果没有它的标签是在capacity名单,不包含在最终的结果中的产品。

+0

谢谢,这解决了我的问题。 – Dementic 2012-01-12 22:36:00

相关问题