Linq创建一个Dto对象数组,其中包含一个数组

时间:2014-06-08 14:50:05

标签: c# sql arrays linq nhibernate

我有一个丰富的NHibernate dbo对象,我需要查询该对象以提取关键字和相关的国家/地区代码数组。

解释: 我有3个从数据库返回的相关DBO对象,它们具有以下结构:

class DboCountry{
    public int CountryId {get;set;}
    public string CountryCode {get;set;}
}       

class DboPage{
    public int Id {get;set;}
    public string Keyword {get;set;}
}

class DboPageCountry{
    public int Id {get;set;}
    public DboThemePage DboThemePage {get;set;}
    public DboCountry DboCountry {get;set;}
}

在查询数据库时,我得到一个DboPageCountries列表,其中包含多个与各种DboCountry.CountryCode相关联的重复DboPage.Keyword

我需要做的是获取DboPageCountries列表并创建一个DtoKeywordCountryCode数组,其结构如下:

class DtoKeywordCountryCode{
    public string Keyword {get; set;}
    public string[] CountryCodes {get; set;}
}

到目前为止,使用Linq,我已经能够对关键字进行分组,但无法获取相关的国家/地区代码,或获取关键字和国家/地区代码,但未作为针对一系列适用CountryCodes的唯一关键字关联

任何正确方向的指针都非常赞赏。

2 个答案:

答案 0 :(得分:1)

试试这个 -

var items = new List<DboPageCountry>(); //list of DboPageCountries

var items2 = from x in items.GroupBy(x => x.DboThemePage) 
             select new DtoKeywordCountryCode { Keyword = x.First().DboThemePage.Keyword, CountryCodes = x.Select(c => c.DboCountry.CountryCode).ToArray() };

答案 1 :(得分:0)

DtoThemePage[] dtoThemePageArrayFull = (from tpc in dboThemePageCountryList group tpc by tpc.DboThemePage.Keyword into k
                                        select new DtoThemePage
                                        {
                                            Keyword = k.Key,
                                            CountryCodes = k.Select(c => c.DboCountry.CountryCode).ToArray<string>()
                                        }).ToArray<DtoThemePage>();