如何限制Linq To Sql中的结果数量?

时间:2009-08-17 01:00:05

标签: .net linq-to-sql

我习惯使用LoadWith语法加载一些子结果(对于父结果)。效果很好。有没有办法可以将这些LoadWith结果限制为最近的5或其他什么?

我有一些带有内联评论的pseduo代码,以帮助解释我正在尝试做的事情......

EG。

IList<Parent> results;

using (DataBaseContext db = new MyDb())
{
    var dlo = new DataLoadOptions();
    dlo.LoadWith<Parent>(x => x.Child1);  // We only want the most recent 10.
    dlo.LoadWith<Parent>(x => x.Child2);  // All of these...
    dlo.LoadWith<Parent>(x => x.Child3);  // Only the most recent 1.
    db.LoadOptions = dlo;

    results = (from p in Parent
               orderby p.Id descending
               select p).Take(5).ToList();
}

干杯:)

1 个答案:

答案 0 :(得分:2)

这应该有效,假设您将排序顺序设置为有意义的。 (DataLoadOptions.AssociateWith() Reference

IList<Parent> results;

using (DataBaseContext db = new MyDb())
{
    var dlo = new DataLoadOptions();
    dlo.LoadWith<Parent>(x => x.Child1);  // We only want the most recent 10.
    dlo.AssociateWith<Parent>(x => x.Child1.OrderByDescending(c => c.Date).Take(10));
    dlo.LoadWith<Parent>(x => x.Child2);  // All of these...
    dlo.LoadWith<Parent>(x => x.Child3);  // Only the most recent 1.
    dlo.AssociateWith<Parent>(x => x.Child3.OrderByDescending(c => c.Date).Take(1));
    db.LoadOptions = dlo;

    results = (from p in Parent
               orderby p.Id descending
               select p).Take(5).ToList();
}

Pure Krome编辑

请注意(读取此内容的任何人)如果您使用AssociateWith方法,则必须在其前面加载LoadWith。注意我们如何LoadWith(child1)和下一行我们AssociateWith(..一些funky-ass lambda)?这很好 - &gt;如果你忘记在AssociateWith之前放入LoadWith,那么不会生成任何sql,也不会为该孩子返回任何内容。