为什么我的Linq声明被执行了两次?

时间:2011-10-02 05:54:29

标签: c# linq-to-sql mvc-mini-profiler

我正在研究内部消息系统。我把mvc mini profiler连接起来了,它告诉我一些语句被执行了两次,我无法弄明白为什么,

我的控制器非常简单:

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 个答案:

答案 0 :(得分:4)

我的猜测是因为@post.User.Name部分正在为每条记录执行。原始查询是否返回了2个结果?

解决此问题的最佳方法是在原始查询中执行选择以获取所需的所有信息(标题,ID和用户名)。

答案 1 :(得分:1)

查询正在获取每个用户的用户名。参数@ p0是用户ID。如果检查它的值,您很可能会发现每个查询的值都不同。

答案 2 :(得分:0)

Linq声明没有被执行两次。第一个查询来自Linq语句,我猜测第二个和第三个查询来自你的@foreach循环。