LINQ to SQL активно загружается с условиями - PullRequest
6 голосов
/ 02 апреля 2009

Я пытаюсь изучить 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 ]

7 голосов
/ 02 апреля 2009

Вы можете сделать это, используя 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()
            }
1 голос
/ 02 апреля 2009

Если вам нужен только последний пост, то я подозреваю, что простой запрос этого поста будет более эффективен при ленивой загрузке, чем при принудительной загрузке таким способом.

...