假设我有以下内容......
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"当我试着这个。
答案 0 :(得分:2)
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))" />
然后您可以使用linq-to-nhibernate订购
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);