C# LINQ无法将void分配给隐式类型的变量
我试图在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
[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会改变行之间的其他字段是否相同?