日期:2014-05-20  浏览次数:20687 次

求LINQ查询课程表的语句
课程表:
A 1  A 2  A 3  B 4
A 1  B 2  C 3  C 4
A 1  A 2  C 3  B 4
B 1 
B 1
C 1

A/B/C代表课程名字,1、2、3、4代表星期几,类定义如下:

    public class schedule
    {
        public string name { get; set; }
        public int weekDay { get; set; }
    }


请问怎样写以下这种情况的LINQ语句:
1、查询星期一、二同时有课的课程,按这个课程表查询结果应该是:A B
2、查询星期一、二、三同时有课的课程,按这个课程表查询结果应该是:A
3、查询任意天数星期同时有课的课程。任意天数用List<int>表示。

其实问题1、2、3可以用同一个LINQ语句来实现,请高手写出详细可执行代码,谢谢!
------解决方案--------------------
            List<int> days = new List<int>();
            days.Add(1);
            days.Add(2);
            days.Add(3);
=>
            List<int> days = Enumerable.Range(1, 3).ToList();




            var query = from x in allSche
                        group x by x.name into g
                        where days.All(z => g.Select(y => y.weekDay).Contains(z))
                        select g.Where(x => days.Contains(x.weekDay));
            string name = "";
            foreach(var q in query)
            {
                foreach (var qq in q)
                {
                    name += qq.name + " " + qq.weekDay.ToString() + Environment.NewLine;
                }
            }
            this.rtb_searchContent.Text = name;



=>

            var query = (from x in allSche
                        group x by x.name into g
                        where days.All(z => g.Select(y => y.weekDay).Contains(z))