多表分页查询模板

下面模板为同时搜索news和product表的数据。

@{
    string kw = StringHelper.Format<string>(HttpContext.Current.Request.QueryString["kw"]);
    string[] pagePathArr = Html.PagePath().Split('/');
    int currentPage = StringHelper.Format<int>(pagePathArr[pagePathArr.Length - 2]);
    if (currentPage <= 0)
    {
      currentPage = 1;
    }
    int pageSize=24;
    PageInfo pageInfo = new PageInfo()
    {
        PageSize = pageSize,//每页显示24条数据
        CurrentPage = currentPage //当前页码,系统预设
    };
    List<dynamic> infoList = new List<dynamic>();
    Dictionary<int, int> columnIds = new Dictionary<int, int>();
    Dictionary<int, string> columnNames = new Dictionary<int, string>();
    int columnId = 0;
    int i=1;
    int recordCount=0;
    if (!string.IsNullOrEmpty(kw))
    {
        //获取总数据量,数据多建议不统计。
        string countSql=" SELECT count(id) as co ";
        countSql += " FROM (";
        countSql += " SELECT id FROM [news] where state=1 and isSubColumnData=0 and title like @kw";
       //多表连接
        countSql += " UNION ALL SELECT id FROM [product] where state=1 and isSubColumnData=0 and title like @kw";
        countSql += ") AS sub_query";
        var countData= Html.SqlQueryFirst(countSql,new { kw = "%" + kw + "%" });
         recordCount=countData.co;//获取总记录数
        
         pageInfo.RecordCount=recordCount;
         int pageCount = (recordCount % pageSize == 0) ? (recordCount / pageSize) : (recordCount / pageSize + 1);
         pageInfo.RecordCount = recordCount;
         pageInfo.PageCount = pageCount;
        
        //查询数据
        string sql=" SELECT * FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY thedate desc) AS row_num";
        sql += " FROM (";
        sql += " SELECT id,columnId,title,thedate,'news' as [name] FROM [news] where state=1 and isSubColumnData=0 and title like @kw";
        //多表连接
        sql += " UNION ALL SELECT id,columnId,title,thedate, 'product'as [name] FROM [product]  where state=1 and isSubColumnData=0 and title like @kw";
        sql += ") AS sub_query";
        sql+=") AS numbered_rows WHERE row_num BETWEEN "+((currentPage-1)*pageSize+1)+" AND "+currentPage*pageSize;
        infoList = Html.SqlQuery(sql,new { kw = "%" + kw + "%" }).ToList();
    }
   ViewDataDictionary<dynamic> viewDataDictionary = new ViewDataDictionary<dynamic>();
   viewDataDictionary.Add("path", "/news/search/");
}
<div class="container padding-bottom-40">
    <div class="row">
        <div class="bread-Body">
            <ul class="breadcrumb">
                <li>当前位置:<a href="@Html.SiteUrl()"><span>首页</span></a></li>
                <li><a href="#">搜索</a></li>
            </ul>
        </div>
        <div class="all-list">
             <ul>
                @{
                    int num = 0;
                    int num2 = 0;
                    foreach (var item in infoList)
                    {
                        num++;
                        num2++;
                        string url = "/"+ item.name+"/"+item.id+".cshtml";
                        string date = item.thedate.ToString("yyyy-MM-dd");
                        if (num2 % 8 == 0)
                        {
                            <li>
                                <a href="@url">@(item.title)</a>
                                <span>@date</span>
                            </li>
                            <hr />
                        }
                        else
                        {
                            <li>
                                <a href="@url">@(item.title)</a>
                                <span>@date</span>
                            </li>
                        }
                    }
                    
                }
        </ul>
            @if (num == 0)
            {
                <div class="line-height-2 padding-bottom-20 padding-top-20 font-size-16">
                    暂时没有找到匹配的记录,请更换一个关键词重新搜索!
                </div>
            }
            @Html.Partial("PagebreakPartial", pageInfo, viewDataDictionary)
        </div>
    </div>
</div>