考虑一下:
var query = (from u in entity.Users
select new
{
FullName = u.FirstName + " " + u.LastName
}
);
哪种方法很好,但我想做的是:
var query = (from u in entity.Users
select new
{
FullName = u.FullName
}
);
我正在使用返回(u.FirstName + " " + u.LastName)
[NotMapped]
public string FullName
{
get
{
return FirstName + " " + LastName;
}
}
但是我收到了一个错误:
LINQ to Entities不支持指定的类型成员'FullName'。
我知道如果我实现查询它会工作正常,但我不想这样做。我想在数据库级别进行,所以最好的方法是什么呢,这有可能吗?或者我必须始终(u.FirstName + " " + u.LastName)
p.s:我也试过这个:(不适合我)
public static Expression<Func<User, string>> FullName()
{
return u => u.FirstName + " " + u.LastName;
}
谢谢
答案 0 :(得分:1)
由于db不知道如何执行服务器端方法,因此无法工作。 可能的选择:
private static readonly CompiledExpression<Customer, string> fullNameExpression
= DefaultTranslationOf<User>.Property(e => e.FullName)
.Is(e => e.FirstName + " " + e.LastName);
[NotMapped]
public string FullName
{
get { return fullNameExpression.Evaluate(this); }
}
var q = dbContext.Users.Select(u => new
{
FullName = u.FullName
}).WithTranslations();
[NotMapped]
[Computed]
public string FullName
{
get { return FirstName + " " + LastName; }
}
var q = dbContext.Users.Select(u => new
{
FullName = u.FullName
}).Decompile();
封装:
public static Expression<Func<MyEntity, MyDto>> SelectFullNames()
{
return e => new MyDto{} { Fullname = e.FirstName + " " + e.LastName;
}
var queryable = dbConext.Users.Select(SelectFullNames());
免责声明 - 我没有在真实世界中使用图书馆。