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

如何在LINQ查询中正确填充嵌套类的属性?

解决LINQ对象初始化器中嵌套属性赋值问题

你遇到的问题是对象初始化器不支持直接通过嵌套属性路径(如Seconda.Nome)赋值,必须显式初始化嵌套的Seconda对象,在它自己的初始化器中设置属性值。

修正后的LINQ查询代码如下:

ClassProva dati = (from c in DS.Tables[0].AsEnumerable()
                   where c.Field<Int32>("Ident") == Id
                   select new ClassProva()
                   {
                       Name = c.Field<string>("Nome"),
                       // 显式初始化Seconda对象并设置其属性
                       Seconda = new ClassSeconda()
                       {
                           Nome = c.Field<string>("Nome_Seconda"),
                           Maggiore = c.Field<double>("Maggiore"),
                           Minore = c.Field<double>("Minore")
                       }
                   }).FirstOrDefault();

补充说明

虽然你的ClassProva类中已经给Seconda设置了默认初始化(= new()),但在LINQ的对象初始化器中显式重新初始化Seconda是更清晰的做法,能确保从DataTable中读取的属性值正确覆盖默认值。如果想保留原默认对象并修改属性,也可以用以下方式(不过不推荐,因为多了一步对象引用操作):

ClassProva dati = (from c in DS.Tables[0].AsEnumerable()
                   where c.Field<Int32>("Ident") == Id
                   select new ClassProva()
                   {
                       Name = c.Field<string>("Nome")
                   }).FirstOrDefault();

// 初始化后再修改嵌套属性
if(dati != null)
{
    dati.Seconda.Nome = c.Field<string>("Nome_Seconda");
    dati.Seconda.Maggiore = c.Field<double>("Maggiore");
    dati.Seconda.Minore = c.Field<double>("Minore");
}

但第一种显式初始化嵌套对象的方式更符合LINQ的写法,也更简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 18:12:38