public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName { get; set; }
}
var joe = new Person {
FirstName = "Joe",
LastName = "Smith",
//The following line produces the error:
//The Name FirstName does not exist in the current context
FullName = Firstname + " " + LastName
}
如果我尝试在C#中执行此操作,则不允许我引用其他属性。
如果我这样做:
var joe = new Person ()
joe.FirstName = "Joe";
joe.LastName = "Smith";
joe.FullName = Firstname + " " + LastName;
一切都很好。
我的理解是,使用Object Literal实例化,编译器会在编译时将所有内容转换为第二个示例。
但是,在Linq to Entity中,我们必须在Object Instantiation中使用Object Literals,如下所示:
List<PersonDTO> people = dbContext.Person.Where(x => x.IsAlive)
.Select(y => new PersonDTO
{
FirstName = y.FirstName,
LastName = y.LastName,
FullName = ???
}
我知道我可以引用y.FirstName + " " y.LastName
,但会在生成的SQL查询中创建额外的代码。
虽然这是一个简单的例子,但我正在使用更大更复杂的数据集。
所以问题是:
有没有办法在Object Literal Instantiation中将属性连接在一起?
如果没有,我可以以某种方式将y
传递给对象构造函数吗?
如果没有,做这样的事情的最佳方式是什么?
答案 0 :(得分:2)
我在这种情况下的建议是在Person
实体中使用NotMapped属性:
public class Person
{
//..
[NotMapped]
public string FullName
get
{
return FirstName + " " + LastName;
}
}
答案 1 :(得分:0)
如果您正在寻找在类中创建FullName属性的方法,那么最好的方法是在项目中创建一个包含Person的部分类的类文件。
public partial class Person
{
public string FullName
get
{
return FirstName + " " + LastName
}
}