Jos*_*ell 5 c# linq .net-4.0 sql-order-by
我知道如何通过一个房产,然后另一个房产订购.我想知道是否有任何属性的linq方式(或同时多个属性).
例如,名单列表:
->Adam Jones
->Dude Lebowski
->Zander Berry
Run Code Online (Sandbox Code Playgroud)
将被排序:
->Adam Jones
Zander ->Berry
->Dude Lebowski
Run Code Online (Sandbox Code Playgroud)
这是一个奇怪的想要.
您可以将任何您喜欢的Func <TSource,TKey>传递给OrderBy: -
names.OrderBy(x => x.FirstName.CompareTo(x.LastName) < 0
? x.FirstName
: x.LastName);
Run Code Online (Sandbox Code Playgroud)
或者如果您认为内联三元看起来很丑(或者如果您需要在整个地方重复使用排序),您可以编写自己的IComparer: -
http://msdn.microsoft.com/en-us/library/bb549422.aspx
class PersonFirstOrLastNameComparer : IComparer<Person>
{
public int Compare( Person x, Person y )
{
return GetKey( x ).CompareTo( GetKey( y ) );
}
private String GetKey( Person person )
{
if ( person.FirstName.CompareTo( person.LastName ) < 0 )
{
return person.FirstName;
}
else
{
return person.LastName;
}
}
}
Run Code Online (Sandbox Code Playgroud)
和:-
names.OrderBy(x => x, new PersonFirstOrLastNameComparer());
Run Code Online (Sandbox Code Playgroud)
真的,我会反对它.如果您发现自己按模型类中两个属性的早期排序,我怀疑您的模型类可能无法完成任务.
如果不了解更多有关您的特定应用程序的话,我不能说更多,但我可能建议将该逻辑封装在模型类中(通过提供特定属性,例如Person.SortKey或通过覆盖CompareTo进行通用排序)或者创建视图模型.我发布的代码片段在代码审查中会有点令人兴奋.我认为保持模型(或ViewModel)的逻辑将澄清目的.