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

在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 就能高效地返回自定义类型的查询结果。
以上就是C#中如何使用EF Core的查询自定义投影?到自定义类?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1439922.html
微信扫一扫
支付宝扫一扫