列出<uri> .OrderBy()基于Contains()的排序顺序?</uri>

时间:2011-09-20 20:42:29

标签: c# list collections

我定义了一个标准List<Uri>,其中包含一个简短的项目列表。我想使用foreach()迭代列表,但是想要将包含特定字符串值的项“置于顶部”以便首先处理它们。 OrderBy()是否可以实现这一点,更好的是,它可以在一行中实现吗? 谢谢!

3 个答案:

答案 0 :(得分:6)

你可以这样做:

foreach(var uri in uriList.OrderByDescending(uri => uri.ToString().Contains("foo"))
{
    // Use uri

答案 1 :(得分:3)

是。您可以使用返回布尔值的订单来使用OrderByDescending() - 例如:

var results = items.OrderByDescending( x => x.Name=="Herbert").ToList();

在这种情况下,订单将为“Herbert”返回true,为所有其他值返回false。所有true值将在所有false值之后订购 - 我们通过使用OrderByDescending()来反转订单并获得所需的结果。

改编为您的Uri列表和Contains(),它也会返回一个布尔值,这意味着:

foreach(var uri in uriList.OrderByDescending(x => x.ToString().Contains(someString))
{
   //..
}

答案 2 :(得分:3)

其他人使用OrderByDescending,它会起作用,但你要求使用OrderBy,所以这里:

yourList.OrderBy(u => u.AbsoluteUri.Contains("somevalue") ? string.Empty : u.AbsoluteUri);