使用linq或普通c#填充给定的对象结构

使用linq或普通c#填充给定的对象结构,c#,linq,C#,Linq,我正在尝试填充AllTerms对象,该对象将包含LegalFundClassCommercialViewModel和LegalFundClassSideLetterViewModel对象 基本上,LEGAL\u FUND\u类表具有父记录和子记录,并通过列LegalParentClassId进行关联。父母一方有一个孩子。因此,我需要遍历legalfundclass对象并填充 IEnumerable AllTerms。LegalFundClassDetailsViewModel表示法律基金类表中的

我正在尝试填充AllTerms对象,该对象将包含
LegalFundClassCommercialViewModel
LegalFundClassSideLetterViewModel
对象

基本上,LEGAL\u FUND\u类表具有父记录和子记录,并通过列LegalParentClassId进行关联。父母一方有一个孩子。因此,我需要遍历legalfundclass对象并填充
IEnumerable AllTerms
。LegalFundClassDetailsViewModel表示法律基金类表中的记录。因此legalfundClasses变量包含来自此legal\u fund\u class表的记录。有几条记录。有些唱片没有子唱片。我需要以这样一种方式进行填充:将父记录添加到LegalFundClassCommercialViewModel,并将其子记录添加到
LegalFundClassSideLetterViewModel。包装器将包含父记录和子记录的集合,其中一些子记录不存在,因此LegalFundClassSideLetterViewModel属性将为空

有人能告诉我怎么做吗

C#

公共类LegalFundClassViewModel
{
公共数字术语;
公共类LegalFundClassWrapper
{
public LegalFundClassDetailsViewModel legalfundclasscommercialview模型{get;set;}
public LegalFundClassDetailsViewModel LegalFundClassSideLetterViewModel{get;set;}
}
}
公共类LegalFundClassDetailsViewModel
{
公共字符串说明{get;set;}
公共字符串审核摘要{get;set;}
公共字符串FeesReviewSummary{get;set;}
公共字符串TermsReviewSummary{get;set;}
公共int Id{get;set;}
public int FundId{get;set;}
public int FundClassType{get;set;}
公共int?CurrencyId{get;set;}
公共字符串PrimaryCurrencyName{get;set;}
公共字符串OtherCurrencyName{get;set;}
public int?ManagerStrategyId{get;set;}
公共字符串管理器策略语法名称{get;set;}
public int?SubVotingId{get;set;}
公共字符串SubVotingName{get;set;}
公共int?subbotissueid{get;set;}
公共字符串subotissuename{get;set;}
公共int?RedsFrqncyId{get;set;}
公共字符串RedsFrqncyName{get;set;}
公共int?RedsNoticeDays{get;set;}
public int?NoticeTypeOfDaysId{get;set;}
公共字符串NoticeTypeOfDaysName{get;set;}
public int?LegalParentClassId{get;set;}
}
var managerstrategyfundds=GetService()。其中包括(x=>x.ID==managerStratedyId,x=>x.FUNDs)。选择多个(x=>x.FUNDs)。选择(x=>x.ID)。ToList();
var legalfundClasses=GetService()。其中(x=>managerstrategyfundds.Contains(x.FUND_ID));
我尝试创建一个包含所有记录的列表。如何循环并填充AllTerms

  var allFunds = legalfundClasses.Select(fc => new LegalFundClassDetailsViewModel
        {
            Description = fc.DESCRIPTION,
            Id = fc.ID,
            FundId = fc.FUND_ID,
            FundClassType = fc.CLASS_TYPE,
            AuditSummary = getAuditSummary(managerStratedyId, fc.ID),
            FeesReviewSummary = getFeesReviewSummary(fc),
            TermsReviewSummary = getTermsReviewSummary(fc),
            CurrencyId = fc.CURRENCY_ID,
        });



public class LegalFundClassViewModel
    {
        public IEnumerable<LegalFundClassWrapper> AllTerms;


        public class LegalFundClassWrapper
        {
            public LegalFundClassDetailsViewModel 
         LegalFundClassCommercialViewModel { get; set; }
            public LegalFundClassDetailsViewModel 
          LegalFundClassSideLetterViewModel { get; set; }
        }
var allFunds=legalfundClasses.Select(fc=>newlegalfundclassdetailsviewmodel
{
Description=fc.Description,
Id=fc.Id,
FundId=fc.FUND\u ID,
FundClassType=fc.CLASS\u类型,
AuditSummary=getAuditSummary(managerStratedyId,fc.ID),
FeesReviewSummary=getFeesReviewSummary(fc),
TermsReviewSummary=getTermsReviewSummary(fc),
CurrencyId=fc.CURRENCY\u ID,
});
公共类LegalFundClassViewModel
{
公共数字术语;
公共类LegalFundClassWrapper
{
公共法律基金类详细信息视图模型
LegalFundClassCommercialViewModel{get;set;}
公共法律基金类详细信息视图模型
LegalFundClassSideLetterViewModel{get;set;}
}
如下图所示,有两条记录。在legal_parent_class id字段中有值的记录是其顶部记录的子记录。如果注意到顶部记录的id与底部记录的legal_parent_class_id相匹配

识别子项并相应地将记录存储在各自属性中的最佳方法是什么

你需要。在你的情况下

var allFunds = new[]
{
    new LegalFundClassDetailsViewModel
    {
        Id = 101,
        Description = "Parent with child"
    },
    new LegalFundClassDetailsViewModel
    {
        Id = 102,
        Description = "Parent without child"
    },
    new LegalFundClassDetailsViewModel
    {
        Id = 103,
        Description = "I'm child",
        LegalParentClassId = 101
    }
};

var allTerms = (from fund in allFunds
                where fund.LegalParentClassId == null //only parents
                join child in allFunds on fund.Id equals child.LegalParentClassId into gj
                from child2 in gj.DefaultIfEmpty()
                select new LegalFundClassViewModel.LegalFundClassWrapper { LegalFundClassCommercialViewModel = fund, LegalFundClassSideLetterViewModel = child2 })
            .ToArray();
你需要,在你的情况下

var allFunds = new[]
{
    new LegalFundClassDetailsViewModel
    {
        Id = 101,
        Description = "Parent with child"
    },
    new LegalFundClassDetailsViewModel
    {
        Id = 102,
        Description = "Parent without child"
    },
    new LegalFundClassDetailsViewModel
    {
        Id = 103,
        Description = "I'm child",
        LegalParentClassId = 101
    }
};

var allTerms = (from fund in allFunds
                where fund.LegalParentClassId == null //only parents
                join child in allFunds on fund.Id equals child.LegalParentClassId into gj
                from child2 in gj.DefaultIfEmpty()
                select new LegalFundClassViewModel.LegalFundClassWrapper { LegalFundClassCommercialViewModel = fund, LegalFundClassSideLetterViewModel = child2 })
            .ToArray();

好的,除非您详细准确地告诉我们如何将特定的LegalFundClassDetailsViewModel实例分配给LegalFundClassCommercialViewModel或LegalFundClassSideLetterViewModel属性,否则我们不可能给出有意义的建议。我不知道您从哪里得到的ManagerStrategyFundds我现在应该更新我的帖子。让我知道我的帖子更新是否清晰。正如我提到的,我需要将父记录添加到LegalFundClassCommercialViewModel,并将子记录添加到LegalfundClassSideLetterViewModel。我是否需要放置条件语句以及如何检查。父记录在法律比较中通常为空值t_class_id字段和子记录在该字段中具有父记录的id。在您详细准确地告诉我们如何将特定LegalfundClassDetailsView模型实例分配给LegalFundClassWrapper的LegalFundClassCommercialViewModel或LegalFundClassSideLetterViewModel属性之前,不可能或者我们提出有意义的建议。我还不知道你从哪里得到ManagerStrategyFundds我现在要更新我的帖子。让我知道我的帖子更新是否清晰。正如我提到的,我需要将父记录添加到LegalFundClassCommercialViewModel,将子记录添加到LegalfundClassSideLetterViewModel我需要添加条件语句吗我要检查。父记录在合法的父类id字段中通常有空值,子记录在该fie中有父记录的id