本文主要阐述linq to sql多表关联与动态条件查询,虽然好多人对linq很不熟悉,但是本文作者简言较简单,还是很容易理解的。
在去年的有接触过linq,也小试了一刀.但仅仅是简单的from并没有深入去揣摩.这次正好用MVC开发这套系统.所以使用linq 是必须的.
之前我也有说过linq的编写方式看起来很拉风,但他并不是很么的***,有利肯定有弊.要不microsoft推出linq这么长时间了.也没见市场上很热门.至今在我看来.用的人还是很少.这次在开发的过程中.最让我抓狂的就是linq to sql多表关联与动态条件查询.
虽然网上有很多资料是linq to sql多表关系当然也有动态条件查询的.但是并没有找到我想要的答案.与是只能靠自己摸索了.下面就是我要实现的结果,linq to sql多表关联.INNER JOIN + LEFT JOIN
- var q =
- (from ar in db.Articles
- join c in db.Categories on ar.ParentId
- equals c.Id
- join sc in db.Categories on ar.SubId equals sc.Id into scate
- from sc in scate.DefaultIfEmpty()
- where ar.IsPrivate == false
- orderby ar.CreateTime descending
- __select new
- {
- ararticle = ar,
- pcate = c,
- scscate = sc
- }).Take(3);
linq to sql多表动态条件查询:
- Expression> lambda = ar => (1==1);
- if (id != null)
- lambda = (ar => ar.Id == id);
- var article = db.Articles.OrderByDescending
- (a => a.CreateTime).Where(lambda);
- return View(article);
linq to sql多表,如果你要根据条件不同显示相应的数据的话,只要在q对像后追加Where()就OK:
- int Record__count = q.Count(); //得到记录数
- int page = PagerHelper.GetCurrentPage();
- int SkipIndex = (page-1)__ * 5;
- var q = (from ar in db.Articles
- join c in db.Categories on ar.ParentId
- equals c.Id
- join sc in db.Categories on ar.SubId equals sc.Id into scate
- from sc in scate.DefaultIfEmpty()
- where ar.IsPrivate == false
- orderby ar.CreateTime descending
- __select new
- {
- ararticle = ar,
- pcate = c,
- scscate = sc
- });.Skip(SkipIndex).Take(5);
以上就是对linq to sql多表的详细阐述。
【编辑推荐】