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