You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何在类构造函数内执行返回匿名对象的LINQ查询

你当前写法报错的根本原因是Select语句返回的是运行时生成的匿名类型,无法直接隐式转换为你声明的IList<Response>类型,可通过以下两种方案解决:


方案1:直接映射到EF实体类

如果你的Response实体类已经包含ResponseId、SegmentId、Response1、ResponseDescription、ResponseGuidance这几个属性,只需要把Select中的匿名类改为显式创建Response实例即可:

ResponseCCTtoAuditResponse = _cctDBContext.Response
                                          .Select(b => new Response 
                                          { 
                                              ResponseId = b.ResponseId, 
                                              SegmentId = b.SegmentId, 
                                              Response1 = b.Response1, 
                                              ResponseDescription = b.ResponseDescription, 
                                              ResponseGuidance = b.ResponseGuidance
                                          })
                                          .Where(b => b.SegmentId == 5)
                                          .ToList();

注意:如果实体类还有其他必填非空属性,要么在Select里一起赋值,要么确保数据库对应字段有默认值,避免EF映射报错。


方案2:自定义DTO类承接查询结果

如果你只需要这几个字段、不想带实体类的多余属性,更推荐自定义专属的数据传输类:

  1. 首先定义DTO类:
public class AuditResponseDto
{
    public int ResponseId { get; set; }
    public int SegmentId { get; set; }
    public string Response1 { get; set; }
    public string ResponseDescription { get; set; }
    public string ResponseGuidance { get; set; }
}
  1. 修改SegmentData类的字段声明和查询逻辑:
// 把泛型参数从Response改为自定义的AuditResponseDto
private readonly IList<AuditResponseDto> ResponseCCTtoAuditResponse;

// 构造函数内的查询修改为
ResponseCCTtoAuditResponse = _cctDBContext.Response
                                          .Select(b => new AuditResponseDto
                                          { 
                                              ResponseId = b.ResponseId, 
                                              SegmentId = b.SegmentId, 
                                              Response1 = b.Response1, 
                                              ResponseDescription = b.ResponseDescription, 
                                              ResponseGuidance = b.ResponseGuidance
                                          })
                                          .Where(b => b.SegmentId == 5)
                                          .ToList();

以上两种方案都可以直接在构造函数中执行,EF会在你调用ToList()时立即执行查询,符合你要把查询提前放到构造函数里运行的需求。


内容的提问来源于stack exchange,提问作者Jason_Hough

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 06:45:03