当前位置:编程学习 > C#/ASP.NET >>

求个LINQ语句 大侠帮忙 十万火急

数据如下:  
 public static List<JobsInfo> JobsDate()
        {
            List<JobsInfo> source = new List<JobsInfo>();
            source.Add(new JobsInfo() { ID = 1, Name = "部门主任", Level = 1,  });
            source.Add(new JobsInfo() { ID = 2, Name = "财务科长", Level = 2,  }); 
            source.Add(new JobsInfo() { ID = 3, Name = "劳资科长", Level = 2,  });               
            return source;

        }
       public static List<StaffInfo> StaffDate()
        {
            List<StaffInfo> source = new List<StaffInfo>();
            source.Add(new StaffInfo() { Id = 1, Name = "李主任", JobsID = 1 });
            source.Add(new StaffInfo() { Id = 2, Name = "李科长", JobsID = 2 });
            source.Add(new StaffInfo() { Id = 3, Name = "刘科长", JobsID = 3 });
            return source;
        }
如下代码:
List<StaffInfo> ls=StaffDate().where(t=> t.JobsID=2).ToList();//这样会获得StaffDate()表中所有JobsID=2的所有数据,
现在要关联JobsDate()表中的数据 根据相同的Level来返回StaffDate()表中的数据  
输出结果应该是
 source.Add(new StaffInfo() { Id = 2, Name = "李科长", JobsID = 2 });
 source.Add(new StaffInfo() { Id = 3, Name = "刘科长", JobsID = 3 });
这两条数据  
因为他们两个关联的 JobsDate()中 Level是相等的.

各位大侠多贴些代码 小弟初学者 还请多多帮忙  --------------------编程问答-------------------- --------------------编程问答-------------------- where j.Level==2条件是不对的  j.level应该等于当前这条数据的level值

引用 1 楼  的回复:
C# code


List<StaffInfo> ls= (from j in JobsDate()
           join s in StaffDate()
           on j.ID equals s.JobsID
           where j.Level==2
           select s).ToList();
--------------------编程问答-------------------- 描述清楚些,你到底想要什么 --------------------编程问答-------------------- 就是要 取同级别不同职能的员工
用一个员工ID  取跟他同级别 不同职能的 员工列表 --------------------编程问答--------------------

var temp=JobsDate().Where(x=>
           (from j in JobsDate()
           join s in StaffDate()
           on j.ID equals s.JobsID
           where s.id==2   //某员工ID
           select j.Level).Contains(x.Level)).Select(x=>x.ID);

// 取跟他同级别 不同职能的 员工列表
List<StaffInfo> ls=(from sf in StaffDate()
                   where temp.Contains(sf.Id)
                   select sf).ToList();
                   

--------------------编程问答-------------------- 大家快来看啊,还有使用LINQ的傻子来。 --------------------编程问答--------------------
引用 6 楼  的回复:
大家快来看啊,还有使用LINQ的傻子来。

最近.NET版2 B 越来越多了 --------------------编程问答-------------------- 感谢大侠帮忙 我把业务拆开了  现在只剩最后一步 不知道怎么JOIN
int Level = JobsDate().Where(t => t.ID == 2).FirstOrDefault().Level;
List<JobsInfo> LJI = JobsDate().Where(t => t.Level == Level).ToList();
如何获得 职能列表 LJI 获得下面的员工列表
List<StaffInfo> ls=LJI.where(??????不会写 又很急 没时间仔细研究????????)   您老多帮忙吧

引用 5 楼  的回复:
C# code


var temp=JobsDate().Where(x=>
           (from j in JobsDate()
           join s in StaffDate()
           on j.ID equals s.JobsID
           where s.id==2   //某员工ID
           selec……
--------------------编程问答--------------------
引用 8 楼  的回复:
感谢大侠帮忙 我把业务拆开了  现在只剩最后一步 不知道怎么JOIN
int Level = JobsDate().Where(t => t.ID == 2).FirstOrDefault().Level;
List<JobsInfo> LJI = JobsDate().Where(t => t.Level == Level).ToList();
如何获得 职能列表 LJI 获得下面的员工……

var result =from u in StaffDate()
            let n =  LJI.select(c=>c.ID)
            where n.Contains(u.ID)
            select u; --------------------编程问答-------------------- 强类型的换成list
List<StaffInfo> result =(from u in StaffDate()
                        let n = LJI.select(c=>c.ID)
                        where n.Contains(u.ID)
                        select u).ToList(); --------------------编程问答-------------------- --------------------编程问答--------------------
 var jobsSource = JobsDate();
               var staffSource = StaffDate();
               var resultQuery = staffSource.Join((jobsSource.Where(oj => jobsSource.Count(o => o.Level == oj.Level) > 1)), o => o.JobsID, i => i.ID, (o, i) => o);
               foreach (var staffInfo in resultQuery)
               {
                    Console.WriteLine("ID:"+staffInfo.Id.ToString()+"姓名:".PadLeft(10)+staffInfo.Name+"jobID:".PadLeft(10)+staffInfo.JobsID.ToString());
               } --------------------编程问答-------------------- Here you go:

        static List<StaffInfo> GetList(int level)
        {
            var n = from si in StaffDate()
                    join ji in JobsDate() on si.Id equals ji.ID
                    where ji.Level == level
                    select si;

            return new List<StaffInfo>(n);
        }
--------------------编程问答-------------------- 同意!!!
引用 7 楼  的回复:
引用 6 楼 的回复:
大家快来看啊,还有使用LINQ的傻子来。

最近.NET版2 B 越来越多了
--------------------编程问答-------------------- 看6楼回复
引用 6 楼  的回复:
大家快来看啊,还有使用LINQ的傻子来。
--------------------编程问答-------------------- List<StaffInfo> ls= (from j in JobsDate()
           join s in StaffDate()
           on j.ID equals s.JobsID
           where j.Level==2
           select s).ToList();
--------------------编程问答--------------------
引用 11 楼  的回复:
C# code

var job = JobsDate().Where(t => t.ID == 2).FirstOrDefault();
if(job !=null)
{
int Level=job.Level;
List<JobsInfo> LJI = JobsDate().Where(t => t.Level == Level).Select(j=>j.ID);
//获得 职能……

猫的LINQ基础真给力. --------------------编程问答-------------------- 猫哥就是牛。 --------------------编程问答--------------------
引用 7 楼 q107770540 的回复:
引用 6 楼  的回复:大家快来看啊,还有使用LINQ的傻子来。
最近.NET版2 B 越来越多了


   版主发火了,呵呵 --------------------编程问答--------------------  版主发火了,呵呵
补充:.NET技术 ,  LINQ
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,