C#中如何使用EF Core的查询自定义投影?到自定义类?

小老鼠
发布: 2025-09-24 10:23:01
原创
371人浏览过
答案:在C#中使用EF Core可通过Select方法将查询结果投影到自定义类。1. 创建无映射要求的类如ProductSummary;2. 用Select映射字段,生成高效SQL;3. 支持计算字段与条件逻辑;4. 注意需公共无参构造函数、属性名类型匹配、避免本地方法调用;5. 临时场景可用匿名类。

c#中如何使用ef core的查询自定义投影?到自定义类?

在C#中使用EF Core进行查询时,如果想将结果投影到一个自定义类(而不是实体类),可以使用 LINQ 的 Select 方法或 自动映射 功能。这种方式称为“自定义投影”。只要字段类型兼容且命名匹配,EF Core 能在查询执行时自动创建自定义类的实例。

1. 创建自定义类

这个类不需要是 EF 的实体,也不需要配置映射。

public class ProductSummary
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    public string CategoryName { get; set; }
}
登录后复制

2. 使用 Select 进行投影查询

假设你有一个 Product 实体和关联的 Category 实体:

var result = context.Products
    .Where(p => p.Price > 100)
    .Select(p => new ProductSummary
    {
        Id = p.Id,
        Name = p.Name,
        Price = p.Price,
        CategoryName = p.Category.Name
    })
    .ToList();
登录后复制

这会生成 SQL 查询,只选择必要的字段,并将结果映射到 ProductSummary 类型。

3. 支持复杂表达式和计算字段

你还可以包含计算值或条件逻辑:

var result = context.Products
    .Select(p => new ProductSummary
    {
        Id = p.Id,
        Name = p.Name.ToUpper(),
        Price = p.Price * 1.1m, // 加税后价格
        CategoryName = p.Category != null ? p.Category.Name : "未分类"
    })
    .ToList();
登录后复制

4. 注意事项

  • 自定义类必须有公共无参构造函数(默认就有)
  • 属性名和类型需与查询中赋值的字段兼容
  • 不能用于跟踪(AsNoTracking 默认生效)
  • 避免在 Select 中使用本地方法(如自定义 C# 函数),否则会引发客户端求值或异常

5. 使用匿名类(临时场景)

如果只是局部使用,也可以用匿名对象:

var result = context.Products
    .Select(p => new
    {
        p.Id,
        p.Name,
        p.Price,
        CategoryName = p.Category.Name
    })
    .ToList();
登录后复制

基本上就这些。只要保证投影结构清晰、字段可映射,EF Core 就能高效地返回自定义类型的查询结果。

通义视频
通义视频

通义万相AI视频生成工具

通义视频70
查看详情 通义视频

以上就是C#中如何使用EF Core的查询自定义投影?到自定义类?的详细内容,更多请关注php中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号