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

LINQ文查询,一对多的关系,请教!!!急!

主表有多条符合条件的数据
class和student是1:M的关系
类 class
id    claseName   grade
1001   三年一班   三年级
1002   三年二班   三年级
1003   四年一班   四年级

类 student
id    classId   age
1001   1002      8
1002   1002      9
1003   1002      9
查出三年级,年龄大于等于9的学生信息

已从数据库查询出来一个list<class>,无条件查询出来的
现在要进行筛选,查出三年二班,年龄大于等于9的学生信息

要求写成list.where(...)形式,不是写成from p in list...

谢谢各位!!! --------------------编程问答-------------------- liststu=liststu.Where(t=>t.age>=9&&t.classId==listclass.First(tt=>tt.claseName=="三年二班").id).ToList(); --------------------编程问答-------------------- var ary=listclass.Where(t=>t.grade=="三年级").Select(t=>t.id).ToArray();
liststu=liststu.Where(t=>t.age>=9&&ary.Contains(t.classId)).ToList(); --------------------编程问答-------------------- 楼上的可以 
之前有一帖一样的 需求看似明了,是不是 还没表达清楚?
楼主所说的 主表 是哪个表?
linq 是 to sql 还是 to Entity?
--------------------编程问答--------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Class
    {
        public int ID { get; set; }
        public string Name { get; set; }
    }

    class Student
    {
        public int ID { get; set; }
        public int ClassID { get; set; }
        public int Age { get; set; }
    }
    class Program
    {
        static void Main(string[] args)
        {
            List<Class> classes = new List<Class>() 
            { 
                new Class() { ID = 0, Name = "二年一班" },
                new Class() { ID = 1, Name = "二年二班" },
                new Class() { ID = 2, Name = "三年一班" },
                new Class() { ID = 3, Name = "三年二班" },
                new Class() { ID = 4, Name = "四年一班" },
                new Class() { ID = 5, Name = "四年二班" }
            };
            List<Student> students = new List<Student>()
            {
                new Student() { ID = 0, ClassID = 1, Age = 7 },
                new Student() { ID = 1, ClassID = 2, Age = 8 },
                new Student() { ID = 2, ClassID = 2, Age = 9 },
                new Student() { ID = 3, ClassID = 3, Age = 9 },
                new Student() { ID = 4, ClassID = 3, Age = 8 },
                new Student() { ID = 5, ClassID = 3, Age = 9 },
                new Student() { ID = 6, ClassID = 3, Age = 10 },
                new Student() { ID = 7, ClassID = 4, Age = 9 },
                new Student() { ID = 8, ClassID = 5, Age = 10 },
                new Student() { ID = 9, ClassID = 5, Age = 10 },
            };
            var query = classes.GroupJoin(students, x => x.ID, x => x.ClassID, (g, s) => new { ClassID = g.ID, ClassName = g.Name, Students = s });
            foreach (var item in query)
            {
                Console.WriteLine("name = {0}, id = {1}, students: {{ {2} }}.", item.ClassName, item.ClassID, string.Join("; ", item.Students.Select(x => string.Format("{{ id = {0}, age = {1} }}", x.ID, x.Age))));
            }

            var query1 = classes.GroupJoin(students, x => x.ID, x => x.ClassID, (g, s) => new { ClassID = g.ID, ClassName = g.Name, Students = s }).SelectMany(x => x.Students, (x, y) => new { x.ClassName, y.Age, y.ID, x.ClassID }).Where(x => x.ClassName == "三年二班" && x.Age >= 9);
            foreach (var item in query1)
            {
                Console.WriteLine("id {0}. classid {1}. age {2}.", item.ID, item.ClassID, item.Age);
            }
        }
    }
}

name = 二年一班, id = 0, students: {  }.
name = 二年二班, id = 1, students: { { id = 0, age = 7 } }.
name = 三年一班, id = 2, students: { { id = 1, age = 8 }; { id = 2, age = 9 } }.

name = 三年二班, id = 3, students: { { id = 3, age = 9 }; { id = 4, age = 8 }; {
 id = 5, age = 9 }; { id = 6, age = 10 } }.
name = 四年一班, id = 4, students: { { id = 7, age = 9 } }.
name = 四年二班, id = 5, students: { { id = 8, age = 10 }; { id = 9, age = 10 }
}.
id 3. classid 3. age 9.
id 5. classid 3. age 9.
id 6. classid 3. age 10.
Press any key to continue . . .
补充:.NET技术 ,  LINQ
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,