C# LINQ无法将void分配给隐式类型的变量

C# LINQ无法将void分配给隐式类型的变量,c#,linq,C#,Linq,我试图在LINQ的帮助下将这组数据转换为对象,但出现以下错误: 无法将void分配给隐式类型的变量 我可以理解我必须使用选择功能,但我不知道如何使用 数据集: [Zip] [Fips] [County] [StateAbbr] [StateName] 90210 12345 County1 CA California 90210 12346 County2 CA California 90210 12347 County3

我试图在LINQ的帮助下将这组数据转换为对象,但出现以下错误:

无法将void分配给隐式类型的变量

我可以理解我必须使用选择功能,但我不知道如何使用

数据集:

[Zip]   [Fips]  [County]    [StateAbbr] [StateName]
90210   12345   County1     CA      California
90210   12346   County2     CA      California
90210   12347   County3     CA      California
90210   12348   County4     CA      California
代码段:

 var zipInfo = results.ForEach(z => new ZipInfoEntity{
        Zip = z.Zip,
        StateName = z.StateName,
        StateAbbr = z.StateAbbr,
        FipsCountyInfo = new List<FipsCountyInfoEntity>{
            new FipsCountyInfoEntity {
                Fips = z.Fips,
                County = z.County
            }
        }
    });

public ZipInfoEntity
{
    public string Zip {get;set;}
    public string StateName {get;set;}
    public string StateAbbr {get;set;}
    public IList<FipsCountyInfoEntity> FipsCountyInfo {get;set;}
}

public FipsCountyInfoEntity
{
    public string Fips {get;set;}
    public string County {get;set;}
}
ZipInfoEntity中的属性FipsCountyInfo应该这样声明

public ZipInfoEntity
{
    public string Zip {get;set;}
    public string StateName {get;set;}
    public string StateAbbr {get;set;}
    public FipsCountyInfoEntity FipsCountyInfo {get;set;} // <-- use class, not IList
}
ZipInfoEntity中的属性FipsCountyInfo应该这样声明

public ZipInfoEntity
{
    public string Zip {get;set;}
    public string StateName {get;set;}
    public string StateAbbr {get;set;}
    public FipsCountyInfoEntity FipsCountyInfo {get;set;} // <-- use class, not IList
}

您需要正确设置FipsCountryInfo列表。FipsCountyInfo是FipsCountyFoEntity的列表,您正在尝试将FipsCountyFoEntity对象分配给该列表

您需要替换此代码:

FipsCountyInfo = new FipsCountyInfoEntity{
    Fips = z.Fips,
    County = z.County
}
为此:

FipsCountyInfo = new  List<FipsCountyInfoEntity>(){ new FipsCountyInfoEntity{
    Fips = z.Fips,
    County = z.County
}}

您需要正确设置FipsCountryInfo列表。FipsCountyInfo是FipsCountyFoEntity的列表,您正在尝试将FipsCountyFoEntity对象分配给该列表

您需要替换此代码:

FipsCountyInfo = new FipsCountyInfoEntity{
    Fips = z.Fips,
    County = z.County
}
为此:

FipsCountyInfo = new  List<FipsCountyInfoEntity>(){ new FipsCountyInfoEntity{
    Fips = z.Fips,
    County = z.County
}}
首先,ForEach返回void,您试图将其分配给一些在C中无法执行的变量

因此,首先,您应该有如下内容:

var zipInfo = results.Select(z => new ZipInfoEntity{
    Zip = z.Zip,
    StateName = z.StateName,
    StateAbbr = z.StateAbbr,
这里您尝试将FipsCountyFoEntity类型的对象分配给FipsCountyFoEntity IList的集合。您应该改为分配新集合:

    FipsCountyInfo = new List<FipsCountyInfoEntity>(new FipsCountyInfo[] { 
        new FipsCountyInfoEntity{
            Fips = z.Fips,
            County = z.County
        }
    }
});
编辑: 如注释中所述,要仅检索一个元素,可以在末尾使用FirstOrDefault Linq方法,例如:

var zipInfo = results.Select(z => new ZipInfoEntity{
    // ... same code as above
}).FirstOrDefault();
或:

编辑2: 要在FipsCountyFoentity集合中仅获取一个元素,我建议执行以下操作:

var zipInfo = results.Select(e => new ZipInfoEntity 
    {
        Zip = z.Zip,
        StateName = z.StateName,
        StateAbbr = z.StateAbbr,
        FipsCountyInfo = results.Select(z => new FipsCountyInfoEntity
        {
            Fips = z.Fips,
            County = z.County
        }
    }).FirstOrDefault();
或使用GroupBy:

首先,ForEach返回void,您试图将其分配给一些在C中无法执行的变量

因此,首先,您应该有如下内容:

var zipInfo = results.Select(z => new ZipInfoEntity{
    Zip = z.Zip,
    StateName = z.StateName,
    StateAbbr = z.StateAbbr,
这里您尝试将FipsCountyFoEntity类型的对象分配给FipsCountyFoEntity IList的集合。您应该改为分配新集合:

    FipsCountyInfo = new List<FipsCountyInfoEntity>(new FipsCountyInfo[] { 
        new FipsCountyInfoEntity{
            Fips = z.Fips,
            County = z.County
        }
    }
});
编辑: 如注释中所述,要仅检索一个元素,可以在末尾使用FirstOrDefault Linq方法,例如:

var zipInfo = results.Select(z => new ZipInfoEntity{
    // ... same code as above
}).FirstOrDefault();
或:

编辑2: 要在FipsCountyFoentity集合中仅获取一个元素,我建议执行以下操作:

var zipInfo = results.Select(e => new ZipInfoEntity 
    {
        Zip = z.Zip,
        StateName = z.StateName,
        StateAbbr = z.StateAbbr,
        FipsCountyInfo = results.Select(z => new FipsCountyInfoEntity
        {
            Fips = z.Fips,
            County = z.County
        }
    }).FirstOrDefault();
或使用GroupBy:

这应该可以帮助您:

var output = new ZipInfoEntity
{
    Zip = results.First().Zip,
    StateName = results.First().StateName,
    StateAbbr = results.First().StateAbbr,
    FipsCountyInfo = new List<FipsCountyInfoEntity>( 
        results.Select(z=>
            new FipsCountyInfoEntity {
                Fips = z.Fips,
                County = z.County
            }
        )
    )
}
结果。First只获取列表中的第一项。我们使用它是因为我们可以从第一个对象得到前三个字段。然后,在创建FipsCountyInfo列表时,我会遍历结果集,为每个条目构造一个对象

应该注意的是,这假设所有行中的Zip、StateName和StateAbbr都是相同的。如果没有,即您在结果集中有多个zip的详细信息,则这将产生意外结果,您将希望使用group by从结果中获取IEnumerable。

这应该可以:

var output = new ZipInfoEntity
{
    Zip = results.First().Zip,
    StateName = results.First().StateName,
    StateAbbr = results.First().StateAbbr,
    FipsCountyInfo = new List<FipsCountyInfoEntity>( 
        results.Select(z=>
            new FipsCountyInfoEntity {
                Fips = z.Fips,
                County = z.County
            }
        )
    )
}
结果。First只获取列表中的第一项。我们使用它是因为我们可以从第一个对象得到前三个字段。然后,在创建FipsCountyInfo列表时,我会遍历结果集,为每个条目构造一个对象


应该注意的是,这假设所有行中的Zip、StateName和StateAbbr都是相同的。如果它们不是,即您在结果集中有多个zip的详细信息,则这将产生意外结果,您将希望使用group by从结果中获取IEnumerable。

这将返回IEnumerable,但我只希望ZipInfoEntity对象具有List@siddharth我编辑了我的答案,应该与您指定的完全相同。这将返回IEnumerable,但我只希望ZipInfoEntity对象具有List@siddharth我已经编辑了我的答案,应该是你指定的。你能澄清一下你最终的对象结构是什么样的吗?是否应该有一个包含多个县信息对象列表的zip信息实体,或者您确实希望数据集的每一行都有一个zip信息实体?@Chris更新了问题。因此,您需要使用GroupBy,而不是任何select或Onwhatever@m.rogalski你能帮我吗?我想你保证只有FIP和County会改变行与行之间的其他字段是否相同?能否澄清最终的对象结构是什么样的?是否应该有一个包含多个县信息对象列表的zip信息实体,或者您确实希望数据集的每一行都有一个zip信息实体?@Chris更新了问题。因此,您需要使用GroupBy,而不是任何select或Onwhatever@m.rogalski你能帮我吗?我想你保证只有FIP和County会改变行之间的其他字段是否相同?