Почему мой оператор Linq выполняется дважды? - PullRequest
3 голосов
/ 02 октября 2011

Я работаю над внутренней системой сообщений.У меня подключен мини-профилировщик mvc, и он показывает, что некоторые операторы выполняются дважды, и я не могу понять, почему,

Мой контроллер настолько прост, насколько вы можете получить:

var db = MessagingDataContext.Get();
return db.Posts.OrderByDescending(p => p.DatePosted).Skip(pagenumber * pagesize).Take(pagesize);

и мой взгляд такой же простой (моя страница _Layout содержит остальную часть разметки):

@foreach (var post in Model)
{
    <div class="post">
        <p>
            @Html.ActionLink(post.Title, "View", "Posts", new { postid = post.Id})  by @post.User.Name
        </p>
    </div>
}

Так почему же get_User будет выполнен дважды?

Ответы [ 3 ]

4 голосов
/ 02 октября 2011

Я предполагаю, что часть @post.User.Name выполняется для каждой записи.Вернул ли исходный запрос 2 результата?

Лучший способ исправить это - в исходном запросе сделать выбор, чтобы получить всю необходимую информацию (название, идентификатор и имя пользователя).

1 голос
/ 02 октября 2011

Запрос выбирает имя пользователя для каждого пользователя.Параметр @ p0 является идентификатором пользователя.Если вы проверите его значение, вы, скорее всего, обнаружите, что оно отличается для каждого запроса.

0 голосов
/ 02 октября 2011

Оператор Linq не выполняется дважды. Первый запрос взят из оператора Linq, и я предполагаю, что второй и третий запросы - из вашего цикла @foreach.

...