【问题标题】:LINQ to SQL eager loading with conditionsLINQ to SQL 预加载条件
【发布时间】:2009-04-02 14:52:19
【问题描述】:

我正在尝试学习 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());

但它不喜欢那种语法。

【问题讨论】:

    标签: c# .net linq-to-sql eager-loading


    【解决方案1】:

    您可以使用 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】:

    如果您只想要最后一篇文章,那么我怀疑使用延迟加载来专门查询该文章会比以这种方式强制“急切”加载更有效。

    【讨论】:

    • 这意味着进行 2 次数据库调用。理想情况下,您应该能够一次性完成。
    猜你喜欢
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多