我想生成一个类似于sql select的选择语句:
public partial class Person{
public string Name {get;set;}
public string FirstName{ get;set;}
public string DisplayName {get;set;}
public string Town{get;set;}
public int Age {get;set;}
}
select p.*, (p.NAME + ', ' + p.FirstName) as DisplayName from Person p
在linq我会这样做
from p in Person select new
{
p.Name, p.FirstName, p.Age, p.Town, // and so on...
DisplayName = p.NAME + ', ' + p.FirstName
}
有没有办法在sql select中执行它而不列出每个属性?
更新:
因为我在这里使用linqToDB原始类:
[Table("PERSON")]
public class Person{
[Column("ID"), PrimaryKey, NotNull]
public int Id { get; set; }
[Column("NAME")]
public string Name {get;set;}
[Column("FIRST_NAME")]
public string FirstName{ get;set;}
public string DisplayName {get;set;}
[Column("TOWN")]
public string Town{get;set;}
[Column("AGE")]
public int Age {get;set;}
}
答案 0 :(得分:1)
是的,你会将整个对象带入你的select语句:
result[-1] = result[-1][:-1]
免责声明:这会选择一个包含1个属性from p in Person select new
{
person = p,
DisplayName = p.Name + ", " + p.FirstName
}
和另一个Person person
的匿名对象。它不会初始化string DisplayName
属性。
另一种可能性是为类person.DisplayName
提供属性Person
的正确吸气剂:
DisplayName
每次尝试访问它的值时,它都会使用所需的值初始化该属性。而你选择语句变得非常简单:
public string DisplayName
{
get { return this.Name + ", " + FirstName; }
}
如果你使用Linq to SQL,那么你的类可以是部分的,你可以在这里应用第三个策略:创建另一个部分类from p in Person select p;
并给它一个新的构造函数,它接受Person
作为参数并在那里处理初始化:
Person
你的select语句如下所示:
public partial class Person
{
public Person(Person p)
{
this.Name = p.Name;
this.FirstName = p.FirstName;
this.DisplayName = p.Name + ", " + p.FirstName;
this.Town = p.Town;
this.Age = p.Age;
}
}
答案 1 :(得分:0)
您可以通过这种方式更改现有课程,因此您无需明确操作该名称,
public class Person{
public string Name {get;set;}
public string FirstName{ get;set;}
public string DisplayName {
get{
return this.Name+","+this.FirstName;
}
}
public string Town{get;set;}
public int Age {get;set;}
}
答案 2 :(得分:0)
没有直接的方法可以做到这一点,如果您想要选择所有属性,您必须这样做,或者上述任何建议都可以使用:
var result = yourEntity.ToList(); //If it is a list
var result = yourEntity.FirstOrDefault() //If you only want one item
然后访问您的result
并设置DisplayName
值:
result.DisplayName = $"{result.Name}, {result.FirstName}";
或者您可以使用实体框架并使用映射器来映射您拥有的每个对象