LINQ多表关联,List列表显示

本文介绍了一个基于MVC架构的项目实现案例,详细讲解了NewsController类如何通过继承AdminBaseController基类来处理新闻列表请求,并展示了如何利用TempData传递类型ID、使用ViewData设置页面大小等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 此功能是在项目中分离出来的。这种架构可能不太适合别人所用,请甚用

1、NewsController.cs(控制类)

 public class NewsController : AdminBaseController<NewsInfo,News>
    {
        public ActionResult List(int typeID)
        {
            //类似于Session传址
            TempData["TypeID"] = typeID;
            //ViewData只能在当前Action中有效   
            ViewData["PageSize"] = SysConfig.PageSize;
            return View();
        }

        protected override System.Collections.IEnumerable GetPagedList(News type, int? page, int rows)
        {
            int typeID = (int)TempData["TypeID"];
            return type.GetNews(typeID, page ?? 1, rows);
        }

}

2、AdminBaseController.cs(基类)

 public class AdminBaseController<TInfo, TData> : Controller
        where TInfo : BaseModel, new()
        where TData : BaseData<TInfo>, new()
    {

[HttpPost]
        public void GetList(int? page, int rows)
        {
            TData type = new TData();
            IEnumerable pagedList = GetPagedList(type, page, rows);
            int total = type.Count(null);
            Response.Write(Value.Common.JsonHelper.ToDataGridJson(pagedList, total));
        }

        protected virtual IEnumerable GetPagedList(TData type, int? page, int rows)
        {
            return type.GetPagedList(page ?? 1, x => x.ID, false, rows);
        }

}

3、Business类中(只针对于当前页面的处理类)

 public class News : BaseData<NewsInfo>
    {
        public IEnumerable GetNews(int typeID, int page, int rows)
        {
            var v = from t in Table
                    join tt in this.GetTable<NewsTypeInfo>()
                    on t.TypeID equals tt.ID
                    where tt.ID == typeID
                    select new { t.ID, t.Title, TypeName = tt.Name };

            return v.Skip((page - 1) * rows).Take(rows).ToList();
        }
    }

 

4、Models类(实体类)

NewsInfo.cs

[Table(Name = "dbo.News")]
    public class NewsInfo : BaseModel
    {

public string TypeName{ get; set; }

}

5、页面(View)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值