代码之家  ›  专栏  ›  技术社区  ›  Alex

带条件的Linq to SQL预加载

  •  6
  • Alex  · 技术社区  · 15 年前

    我正在尝试学习linq to sql,我已经了解了loadWith函数。我找到的所有示例都将从您在loadWith函数中指定的表中加载所有记录,例如

    var dlo = new DataLoadOptions();
    dlo.LoadWith<Blog>(b => b.Posts);
    this.LoadOptions = dlo;
    

    我想知道的是,在这个示例中是否可以只加载最后一篇博客文章?

    我试过了

    dlo.LoadWith<Blog>(b => b.Posts.Max());
    

    但它不喜欢这种语法。

    2 回复  |  直到 15 年前
        1
  •  7
  •   eglasius    15 年前

    你可以用associateWith来完成。这将起作用:

    var options = new DataLoadOptions();
    options.AssociateWith<Blog>(b => 
        b.Posts.Where(
            p1 => p1.SomeColumn == b.Posts.Max(p2 => p2. SomeColumn)
        ));
    

    此外,如果要将信息加载到单独的类中,或者可以使用匿名类,则只需执行以下查询:

    var query = from b in context.Blogs
                //probably some where you already have
                select new MyBlogs // or with no type in case it is anonymous
                {
                    AColumn = b.AColumn, //map any other values
                    LatestPost = b.Posts.Where(
                          p1 => p1.SomeColumn == b.Posts.Max(p2 => p2. SomeColumn)
                      )).ToList()
                }
    
        2
  •  1
  •   Lazarus    15 年前

    如果您只想要最后一篇文章,那么我怀疑使用惰性加载比用这种方式强制“渴望”加载更有效地查询该文章。