按字段排序,该字段是NHibernate / LINQ

时间:2016-05-16 22:37:58

标签: c# sql linq nhibernate

假设我有以下内容......

public class User
{
    public virtual string FirstName {get; set;}
    public virtual string LastName {get; set;}

    public virtual string LastNameFirst 
    get
    {
         return LastName.Trim() + ", " + FirstName.Trim();
    }

    protected set
    {
         /*Left empty...*/
    }
}

在我的UserMap.cs类中,我有以下内容......

Map(x => x.FirstName).Column("FirstName").Not.Nullable().Length(255);
Map(x => x.LastName).Column("LastName").Not.Nullable().Length(255);

是否可以以某种方式配置它以便我可以调用...

var orderedUsers = users.OrderBy(i => i.LastNameFirst).ToList()

我得到了#34;无法解决财产问题:LastNameFirst"当我试着这个。

2 个答案:

答案 0 :(得分:2)

使用Juan Carlos proposition

var orderedUsers = users.OrderBy(
    i => i.LastName.Trim() + ", " + i.FirstName.Trim()).ToList();

或链排序,根据您的数据,可能适合您的需要,但它可能与您的字符串连接/修剪的顺序不同:

 var orderedUsers = users.OrderBy(
     i => i.LastName.Trim()).ThenBy(i => i.FirstName.Trim()).ToList();

否则,将LastNameFirst映射为SQL公式(例如,我不使用Fluent或逐个代码,但我知道公式也可以使用它们;假设SQL-Server,如果它适用语法是别的):

<property name="LastNameFirst"
  formula="ltrim(rtrim(LastName)) + N', ' + ltrim(rtrim(FirstName))" />

然后您可以使用订购

var orderedUsers = users.OrderBy(i => i.LastNameFirst).ToList();

答案 1 :(得分:1)

如果用户是IQueryable

试试这个

var orderedUsers = users.AsEnumerable()。OrderBy(i =&gt; i.LastNameFirst)。ToList();

var orderedUsers = users.ToList()。OrderBy(i =&gt; i.LastNameFirst);