我从数据库中获取Sytem.Collections.generic.IList
并过滤它searchText
:
String searchText="E"; var query = something().List(); query = query.Where(x => !string.IsNullOrEmpty(x.Name) && x.Name.ContainsInsensitive(searchText)).ToList(); result = query.Select().ToList();
现在我希望结果按Name
列排序.首先是以所有值开头的searchText
所有值,然后是包含的所有值searchText
.
如果我写这个:
result = result.OrderBy(x => x.Name).ToList();
我得到按名称排序的结果,例如:
1. "A name" 2. "B name" 3. "E name" 4. "F name"
所有这一切都包含e
在Name
.我想我的那种是:
1. "E name" 2. "A name" 3. "B name" 4. "F name"
我的OrderBy
表情应该改变什么?
用OrderBy
和连在一起2个订单ThenBy
.OrderBy(x => x.Name.StartsWith(searchText) ? 0 : 1) .ThenBy(x => x.Name)
您可以在另一个之后执行两个排序调用(第一个OrderBy
,所有后续调用ThenBy
):
result.OrderBy(x => !x.Name.StartsWith(searchText)).ThenBy(x => x.Name).ToList();
这将首先排序true(1),然后排序(0)false.将!x.Name
使得顺序正确.然后它x.Name
在两个组中进行排序.