【发布时间】:2019-08-11 09:08:41
【问题描述】:
我有一个场景需要将某些列值返回为 NULL。
我知道您可以使用投影来限制返回或选择的列,但这不是我们想要做的。
作为一个简化的例子,假设我有一个 5 列的表,称为 dbo.Person
+------+---------+-----+------------------------------------------------------------------------+------------------------------------------------+
| Name | Surname | Age | About | Likes |
+------+---------+-----+------------------------------------------------------------------------+------------------------------------------------+
| Bob | Doe | 22 | Grew up in no-man's land. Very strong. Also known as Bobby | Burgers, Taking care of fish, kissing dolphins |
| Jane | Doe | 21 | Grew up on the space station. Supremely intelligent. Also known as Jay | Icecream, Pug named Star Freak, Petting lions |
| John | Doe | 25 | Grew up in a whale. Can sing in sonar. Also known as Unknown | Krill, Box Jellyfish, snacking on sea weed. |
+------+---------+-----+------------------------------------------------------------------------+------------------------------------------------+
我有一个与上表相关的实体类
[Table("Person")]
public class Person
{
public string Name {get; set}
public string Surname {get; set;}
public string Age {get; set;}
public string About {get; set;}
public string Likes {get; set;}
}
我已经定义了数据库对应的上下文:PeopleContext : DbContext
我在PeopleContext 中定义了public DbSet<Person> Person{ set; get;}
假设一切都已设置并正常工作,
无需投影到 Person 以外的其他对象,如何编写我的实体框架查询以等效于以下内容?
SELECT
Name,
Surname,
Age,
NULL AS About,
NULL AS Likes
FROM dbo.Person
【问题讨论】:
-
你可以使用 LINQ 将 Person 属性设置为 null 吗?
-
可能是
peopleContext.Person.Select(x=>new Person(){Name=x.Name,Surname=x.Surname,Age=x.Age,About=null,Likes=null});? -
如果你想对表的所有查询实现这一点,并且你想忽略两个属性的值与你的表同步,你可以将 [NotMapped] 属性添加到这两个属性。如果您只希望这个查询用于一个查询,那么您唯一的选择是编写自定义投影,可以是 @Magnetron 建议的同一类,也可以是自定义类。
-
c# 将接受空字符串,因此您无需执行任何操作。
标签: c# entity-framework linq tsql