linq练习

在csdn上找一些问题,自己研究了一会

1.练习一

select id,name from table order by case when id like 'shanghai%' then 0 when id like 'beijing%' then 1 else 2 end 这条sql 能转化成Linq吗

答案:

 var result1 = from item in study.Customer
                          orderby item.ContactName.Contains("j") ? 0 : item.Country.Contains("t") ? 1 : 2 descending
                         // orderby item.CustomerID  descending
                         select new { item.CustomerID, item.Country, item.ContactName };
 
            var result = study.Customer.OrderByDescending(n =>n.ContactName.Contains("j")?1:n.ContactName.Contains("T")?2:3).Select(n => new { n.CustomerID, n.Country, n.ContactName });
            foreach(var singel in result1)
            {
                Console.WriteLine(singel);
            }

 

2.练习二 select * from student where [id] in (1,2,3,4)怎么写成linq

答案:这里我用的是EDM数据

   List<int> ids=new List<int>{1,2,3,4};
            var result4 = from item in study.Customer
                          where ids.Contains(item.CustomerID)
                          select item;
 
            var result44 = study.Customer.Where(n=>new int[]{1,2,3,4}.Contains(n.CustomerID));
 
            var result5 = from item in study.Customer
                          where new int[] { 1, 2, 3, 4 }.Contains(item.CustomerID)  //匿名数组,也是一个数据集
                          select item;
          
            var result6 = from item in study.Customer
                          join single in ids
                          on item.CustomerID equals single   //ids是一个数组,直接equals就行,他会取出数一个个比较
                          select item;
            var resutl7 = from item in study.Customer
                          where item.CustomerID >= 1 && item.CustomerID <= 4
                          select item;
            var result8 = from item in study.Customer
                          where ids.Any(m=>m==item.CustomerID)//ids也是一个数据集,m相当于遍历数据集中的每个元素
                          select item;
 
            var result88 = study.Customer.Where(n =>new int[]{1,2,3}.Any(m=>m==n.CustomerID));

练习三
有一个Module(ModuleId, ModuleName, ModuleActions,Right)数组,其中ModuleActions属性是一个ModuleAction(ActionId,ActionName,IsDefault)的数组。
请用Linq语句查询出Module数组中Right为真的,ModuleAction的IsDefault为真的第一个ModuleAction组成的一个新的对象数组,
叫做ModuleModle(ModuleId ,ModuleName,ActionName)。
答案:
var query=db.Module.Where(x=>x.Right==true&&x.ModuleActions.IsDefault==true)
.Select(y=>new {y.ModuleId,y.ModuleName,y.ModuleAction.ActionName }).FirstOrDefault().ToArray();
解释:x=>x.Right==true&&x.ModuleActions.IsDefault==true 因为这里两张表时有主外键的关系,通过外键moduleAction可以去到另一张表的isdefault
firstDefault()返回的是符合条件的第一行
posted @ 2013-08-01 10:35  Jackvin  阅读(307)  评论(0编辑  收藏  举报