C# Linq到实体扩展字符串连接
考虑这一点:C# Linq到实体扩展字符串连接,c#,linq,C#,Linq,考虑这一点: var query = (from u in entity.Users select new { FullName = u.FirstName + " " + u.LastName } ); 这很好,但我想做的是: var query = (from u in entity.Users
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)
但我得到了一个错误:
LINQ to实体中不支持指定的类型成员“FullName”
我知道,如果我具体化查询,它将很好地工作,但我不想这样做。我想在db级别上做,那么做的最好方式是什么,可能吗?或者我必须一直这样做(u.FirstName+“”+u.LastName)
p、 s:我也试过:(不为我工作)
public静态表达式FullName()
{
返回u=>u.FirstName+“”+u.LastName;
}
谢谢因为db不知道如何执行服务器端方法,所以它不会工作。 可能的选择: 封装:
public static Expression<Func<MyEntity, MyDto>> SelectFullNames()
{
return e => new MyDto{} { Fullname = e.FirstName + " " + e.LastName;
}
var queryable = dbConext.Users.Select(SelectFullNames());
public静态表达式SelectFullNames()
{
返回e=>newmydto{}{Fullname=e.FirstName+“”+e.LastName;
}
var queryable=dbConext.Users.Select(SelectFullNames());
免责声明-我在真实场景中不使用库。如果使用模型优先方法,您可以创建一个UDF表达式方法。您可以演示如何使用它吗?如果您填写firstName和lastname,则在访问
FullName
属性时将计算全名,并且您的FullName属性为g仅限et,您如何设置该值?您的db是什么?Sql Server?如果是,您可以创建一个计算列:@KasparsOzols:可能我使用得不好,因为我不熟悉它,但我尝试过这个:FullName=u.FullName
public static Expression<Func<User, string>> FullName()
{
return u => u.FirstName + " " + u.LastName;
}
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());