Entity Framework查询部分字段时自动映射到实体

需求: 使用EF的情况下,查询部分实体字段,把查询结果自动映射到指定的实体类。

比如实体类这样定义:

//学生实体类
[Table("student")]
public class Student{
  //主键,编号
  int ID {get;set;}
   
  //名称
  public string Name{get;set;}
 
  //年龄
  public int Age{get;set;}

}

如果要查询某一位学生是这样写:

//db是数据库上下文实体
var studentList=db.Student.Where(o=>o.ID==x).Frist();

上边这样写是没有问题的,但是如果真实项目中,表的字段比较多,而且我们只需要用到其中几个,查询出需求字段即可,没有必要全部查询,比如我只想获取Name,一般是这样写:

var list=db.Student.Where(o=>x).Select(o=>new{
    o.Name
}).ToList();

如果我们想把查询出来的字段直接映射到实体中,我们这样写会报错的:

List<Student> list = db.Student.Where(o =>x).Select(o=>new Student{
   Name=o.Name
}).ToList();

报错信息是:

The entity or complex type 'db.Student' cannot be constructed in a LINQ to Entities query.

解决办法 :我们可以再定义一个没有与数据库表映射的实体类:

//新增实体体,直接继承Student,并标记此类不与数据库映射
[NotMapping]
public class Student2:Student{}

最后代码这样写就达到目的了:

List<Student> list = db.Student.Where(o =>x).Select(o=>new Student2{
   Name=o.Name
}).ToList();

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值