Linq ORM将对象映射到3级对象

时间:2015-06-22 03:29:04

标签: linq orm

我有这样的对象。这包括小组问题(QG),1组问题有很多问题(Q),1个问题有很多答案。

public class CrmQuestionAnswer
{
    public long QgId { get; set; }
    public string QgName { get; set; }
    public int QgMIndex { get; set; }
    public int QgMdf { get; set; }
    public string QgDescription { get; set; }
    public long QId { get; set; }
    public long QParentId { get; set; }
    public string QName { get; set; }
    public string QDescription { get; set; }
    public int QMindex { get; set; }
    public int QMdf { get; set; }
    public bool IsMainQuestion { get; set; }
    public bool IsTitle { get; set; }
    public int QTypeId { get; set; }
    public long AnswerId { get; set; }
    public string AnswerName { get; set; }
    public string AnswerValue { get; set; }
    public int AnswerMdf { get; set; }
    public int AnswerMIndex { get; set; }
    public string AnswerDescription { get; set; }
    public long? LinkQuestionId { get; set; }
}

我想使用Linq将List CrmQuestionAnswer映射到List QuestionGroupView

public class QuestionGroupView:Title
{
    public List<CrmQuestionView> Questions;
}

public class CrmQuestionView: Title
{
    public long? ParentId;
    public bool? IsMainQuestion;
    public bool? IsTitle;
    public long? LinkQuestionId;
    public List<CrmAnswerView> Answers;
}

public class CrmAnswerView : Title
{
    public long? LinkQuestionId;        
}

标题是基类:

public class Title
{
    public long Id { get; set; }
    public string Name { get; set; }
    public int MIndex { get; set; }
    public int Mdf { get; set; }
    public int Type { get; set; }
    public string Description { get; set; }

}

我使用此代码:

public List<QuestionGroupView> GetListQuestionsAnswers(long themaId)
    {

        var questionAnswerDao = new CrmQuestionAnswerDao();
        var questionAnswerlist = questionAnswerDao.GetByThemasId(themaId);

        //map List CrmQuestionAnswer -> List QuestionGroupView: 3 level 
        var listquestiongroup = questionAnswerlist
            .OrderBy(t => t.QgMIndex)
            .ThenBy(t => t.QMindex)
            .GroupBy(t => t.QgId)
            .Select(GetQuestionGroup)
            .ToList();


        return listquestiongroup;
    }

    private static QuestionGroupView GetQuestionGroup(IGrouping<long, CrmQuestionAnswer> grouping)
    {
        var group = grouping.First();
        var question = new QuestionGroupView
        {
            Id = group.QgId,
            Name = group.QgName,
            Description = group.QgDescription,
            Mdf = group.QgMdf,
            MIndex = group.QgMIndex,
            Questions = grouping
                .Select(p => new CrmQuestionView
                {
                    Id = p.QId,
                    Name = p.QName,
                    Description = p.QDescription,
                    Mdf = p.QMdf,
                    MIndex = p.QMindex,
                    Type = p.QTypeId,
                    ParentId = p.QParentId,
                    IsMainQuestion = p.IsMainQuestion,
                    IsTitle = p.IsTitle,
                    Answers = grouping//**This line is wrong**
                        .GroupBy(g => g.QId)
                        .Select(GetTitle)
                        .ToList()

                })
                .ToList()
        };
        return question;
    }


    private static CrmAnswerView GetTitle(IGrouping<long, CrmQuestionAnswer> grouping)
    {
        var group = grouping.First();
        var answer = new CrmAnswerView
        {
            Id = group.AnswerId,
            Name = group.AnswerName,
            Description = group.AnswerDescription,
            MIndex = group.AnswerMIndex,
            Mdf = group.AnswerMdf,
            Type = group.QTypeId,
            LinkQuestionId = group.LinkQuestionId,
        };
        return answer;
    }

这是从服务器Data

获取的数据

我的代码是正确的组问题(2组)与正确的列表问题,但它从数据得到错误的列表答案。

有人可以帮助我吗?

祝你好运

0 个答案:

没有答案