6

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

但它不喜欢这种语法。

4

2 回答 2

7

您可以使用 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()
            }
于 2009-04-02T17:02:40.173 回答
1

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

于 2009-04-02T14:58:10.150 回答