减少往返次数 - linq-to-sql

时间:2011-02-09 11:27:58

标签: linq-to-sql asp.net-mvc-2 foreach

对于以下特定情况和一般情况,是否可以减少执行asp.net mvc 2操作期间到数据库的往返次数? 我正在使用linq-to-sql。 以下代码产生类似于60个选择的内容,它需要60次往返数据库。如何减少往返次数?

如果需要更多代码,我会发布。

我的观点模型:

public class ArticlesContainerViewModel
{
    public ArticlesContainerViewModel()
    {
    }

    public Article CategoryArticle { get; set; }

    public IList<ArticlesNode> CategoryNodes { get; set; }
}

public class ArticlesNode
{
    public Article NodeArticle { get; set; }

    public IQueryable<Article> NodeItems { get; set; }
}

观点:

<ul class="tabs">
        <% foreach (var category in Model)
           { %>
        <li><a href="#" class="s">
            <%= Html.Encode(category.CategoryArticle.AbbreviatedTitle) %></a></li>
        <% } %>
    </ul>
    <!-- tab "panes" -->
    <div class="panes">
        <% foreach (var category in Model)
           {
        %>
        <div>
            <table style="width: 100%;" cellpadding="0" cellspacing="0">
                <% int counter = 0; foreach (var node in category.CategoryNodes)
                   {
                %>
                <%if (counter % 2 == 0)
                  { %>
                <tr>
                    <%} %>
                    <td class="content-container">
                        <div class="index-node-title">
                            <%= Html.Encode(node.NodeArticle.ArticleTitle)%>&nbsp;<span class="small1 darkGrey2">(<%= Html.Encode(node.NodeItems.Count().ToString())%>)</span>
                        </div>
                        <div class="index-node-content">
                            <ul class="index-node-content-list">
                                <% foreach (var item in node.NodeItems.Take(2))

2 个答案:

答案 0 :(得分:1)

如果你问我,代码有点乱,我想Model的类型是IList<ArticlesContainerViewModel>类型或类似的东西。您的问题是您在应用程序中使用IQueryable这个“高”。我想要的结构是:

1. First select all categories and put that in your `ViewModel` using a single query. 
2. From all your categories select all your articles or what else from the db in a single query, put the result in a dictionary where category is the key.

这样你应该只能获得两个查询,而不是现在的m*(n+1)

答案 1 :(得分:0)

看看PLINQO。它将优化您的查询。 www.plinqo.com