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

求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代表星期几,类定义如下:
C# code

    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))
select g.Where(x => days.Contains(x.weekDay))).SelectManay(x => x);
this.rtb_searchContent.Text = string.Join("\r\n", query.Select(x => string.Format("{0} {1}", x.name, x.weekDay)).ToArray());