IGrouping,将键选择为新类型,将SelectManny(值)选择为新的集合类型

时间:2014-07-09 04:06:34

标签: c# linq group-by

我尝试GroupBy一个字段,Select键进入新类型(国家/地区),然后SelectMany进入新的集合类型(CountryPrefix)

通过直觉,我想出了以下内容,但是,我遇到了“密封交易”的麻烦。

给出以下课程

public class TempPrefix
{
    public String CountryName { get; set; }
    public String Prefix { get; set; }
    public int ClassificationId { get; set; }
}

tempPrefixesList<TempPrefix>

  var countries = tempPrefixes
            .GroupBy(x => x.CountryName)
            .Select(x =>  new Country
                {
                    Name = x.Key,
                    CountryPrefixes = x.SelectMany(y => new CountryPrefix
                        {
                            ClassificationId = y.ClassificationId,
                            Prefix = y.Prefix
                        })
                });

SelectMany

上编译错误
  

方法的类型参数   “System.Linq.Enumerable.SelectMany(System.Collections.Generic.IEnumerable,   System.Func&GT)”   无法从使用中推断出来。尝试指定类型参数   明确。

我确定这告诉我一些事情,但我不太确定它是什么

ANSWER

在接受的答案中说明我只需使用Select而不是SelectMany

此外,我必须将结果转换为列表

var countries = tempPrefixes
    .GroupBy(x => x.CountryName)
    .Select(x =>  new Country
        {
            Name = x.Key,
            CountryPrefixes = x.Select(y => new CountryPrefix
                {
                    ClassificationId = y.ClassificationId,
                    Prefix = y.Prefix
                }).ToList()
        });

1 个答案:

答案 0 :(得分:0)

尝试将其更改为Select而不是..

CountryPrefixes = x.SelectMany(y => new CountryPrefix
                        {
                            ClassificationId = y.ClassificationId,
                            Prefix = y.Prefix
                        })

x已经是相应群组下的TempPrefix的集合,因此您可以通过CountryPrefix

获取Select