【问题标题】:Linq query which has a non db object within内有非 db 对象的 Linq 查询
【发布时间】:2014-05-07 00:25:57
【问题描述】:

我有多个视图模型类,它们使用 Linq 从数据库中获取数据(DBContext 类具有类似的结构,但具有更多字段)

我缺乏从一个类对象获取数据的知识,因为它包含在一个没有相应 db 对象的包装类中。

提前感谢您对此提供的任何帮助或建议。

以下是类结构:

public class TopLevelViewModel
{
    public TopLevelID  { get; set; }
    public TopLevelTitle  { get; set; }
    public List<SecondLevelViewModel> SeconLevel { set; get; }

    public TopLevelViewModel()
    {
           Inner = new List<SecondLevelViewModel>();
    }
}

public class SecondLevelViewModel
{
    public SecondLevelID  { get; set; }
    public SecondLevelTitle  { get; set; }
    public TopLevelID  { get; set; }
    public WrapperViewModel  { get; set; }
}   

public class InnerViewModel
{
    public InnerID  { get; set; }
    public InnerTitle  { get; set; }
    public SecondLevelID  { get; set; }
}

public class WrapperViewModel
{
    public List<InnerViewModel> Inner { set; get; }

    public WrapperViewModel()
    {
        Inner = new List<InnerViewModel>();
    }
}

Linq 查询获取上述 db 对象的数据:

List<TopLevelViewModel> data = null;
data = db.TopLevel.Where(t => t.TopLevelID == URLTopLevelID)
                  .Select(t => new TopLevelViewModel()
                                   {
                                      TopLevelID = t.TopLevelID,
                                      TopLevelTitle = t.TopLevelTitle,
                                      SeconLevel = db.SecondLevel.Where(s => s.TopLevelID == t.TopLevelID)
          .Select(s => new SecondLevelViewModel()
                           {
                                SecondLevelID = s.SecondLevelID, 
                                SeconLevelTitle = s.SeconLevelTitle,              
                                WrapperViewModel = ???
                           }).ToList<SecondLevelViewModel>()
                }).ToList < TopLevelViewModel();

查询获取内部对象数据:

db.Inner.Where(i => i.SecondLevelID == s.SecondLevelID)
        .Select(i => new InnerViewModel()
                         {
                             InnerID  = i.InnerID,
                             InnerTitle = i.InnerTitle
                         }).ToList<InnerViewModel>() 

问题:如何将上述内部查询合并为WrapperViewModel 类的一部分,并将其作为单个查询包含在主 Linq 查询中?

WrapperViewModel 没有 DB 对象,但它是InnerViewModel 类的一种包装类。

【问题讨论】:

    标签: linq linq-to-entities asp.net-mvc-5


    【解决方案1】:

    我想我明白了。希望它对某人有用。如果有任何想法/建议,请分享!

    单个查询将是:

           List<TopLevelViewModel> data = null ;
            data = db.TopLevel.Where(t => t.TopLevelID == URLTopLevelID).Select(t => new TopLevelViewModel()
                    {
                        TopLevelID = t.TopLevelID,
            TopLevelTitle = t.TopLevelTitle,
                        SeconLevel = db.SecondLevel.Where(s => s.TopLevelID == t.TopLevelID).Select(s => new SecondLevelViewModel()
                        {
                            SecondLevelID = s.SecondLevelID, 
                SeconLevelTitle = s.SeconLevelTitle,              
                            WrapperViewModel = new WrapperViewModel { Inner = 
                                            db.Inner.Where(i => i.SecondLevelID == s.SecondLevelID).Select(i => new InnerViewModel()
                                                {
                                                   InnerID  = i.InnerID,
                           InnerTitle = i.InnerTitle
                                                }).ToList<InnerViewModel>() 
                        }).ToList<SecondLevelViewModel>()
                    }).ToList < TopLevelViewModel();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 2011-08-24
      • 1970-01-01
      • 1970-01-01
      • 2019-03-29
      • 1970-01-01
      • 2014-06-03
      相关资源
      最近更新 更多