select * from stuInfo where stuNo not in(select stuNo from StuMarks)
怎么用 Linq 进行书写。  求解谢谢!

解决方案 »

  1.   

    var query = stuInfo.Where(x => !StuMarks.Select(y => y.stuNo).Contains(x.stuNo));
      

  2.   

    但是  出现错误
    错误 3 当前上下文中不存在名称“StuMarks”
    错误 2 当前上下文中不存在名称“result”
    错误 1 “Linq.stuInfo”并不包含“Where”的定义


      

  3.   

    我只是给你思路。你映射表的关系后代码看上去是这样的:DBContext db = new DBContext();
    var query = db.stuInfo.Where(x => !db.StuMarks.Select(y => y.stuNo).Contains(x.stuNo));根据你的表名可能有所不同。还有 result,这个冤枉!你看我写的代码中有这个单词么?
      

  4.   

    我假设你已经大致会用linq to sql,知道怎么映射怎么配置,只是查询不会写,如果你前面的都不知道,自己google下,先入门下。
      

  5.   

     // 10. 查询所有未参加考试的学生。。
                StuDBDataContext db = new StuDBDataContext();
                var query = stuInfo.Where(x => !StuMarks.Select(y => y.stuNo).Contains(x.stuNo));
    其实  是这样的!  今天实在想不通了,头大了 - -  所以。
      

  6.   

    你按照我的4l代码修改下,至于result,不知道哪里冒出来的,你别的程序的错。
      

  7.   

      // 10. 查询所有未参加考试的学生。。
                StuDBDataContext db = new StuDBDataContext();
                var query = stuInfo.Where(x => !StuMarks.Select(y => y.stuNo).Contains(x.stuNo));
                //select * from stuInfo where stuNo not in(select stuNo from StuMarks)
                foreach (var c in result)
                {
                    Console.WriteLine(c.StuNo);
                }最下面这个  result  这个错误。

      

  8.   

       var result = from s in db.stuInfo
                             where !(new int?[] {db.stuMarks.}).Contains(s.StuNo)
                             select s;
    这种该类型的该怎么表达。
      

  9.   

    foreach (var c in query)
      

  10.   

    这个类型应该是 IQueryable<stuInfo实体类型> 的。
    不过你写 var 就可以了。
      

  11.   


    告诉你个逻辑知识:实际上多个条件的组合,仅需要Any着一种操作就够了。你可以试试,看所谓not in,或者 all in,之类的,如何用一个Any操作就足以表达?!这是一个很好的逻辑训练。
      

  12.   

    仅需要Any着一种操作就够了  -->  仅需要Any操作以及!(表示not)两个操作就够了这是逻辑知识。任何其它逻辑计算,都可以用这两个来表达,这样你读起来可能更精炼。这个原理,即可以给计算机使用也可以给人类使用。
      

  13.   

    all的写法:
    var query = db.stuInfo.Where(x => db.StuMarks.All(y => y.stuNo != x.stuNo));join的写法var query = from x in db.stuInfo
                join y in db.StuMarks on x.stuNo equals y.stuNo into j
                from item in j.DefaultIfEmpty(default(StuMark类型))
                where item == default(StuMark类型)
                select x;
      

  14.   

    var result = (from s in ctx.stuInfo
                              select s.StuNo).Except(
                            from m in ctx.stuMarks
                            select m.StuNo
                            );
      

  15.   

          var result = from s in ctx.stuInfo
                              where !s.stuMarks.Any()  //where exists 子查询 ,判断子查询的结果与父查询结果是否有相同的值
                        select s;
                foreach (var item in result)
                {
                    Console.WriteLine(item.StuNo);
                }
      

  16.   

       var result = from s in ctx.stuInfo
                             where s.stuMarks.All(m=>m.StuNo!=s.StuNo)//                         select s;
                foreach (var item in result)
                {
                    Console.WriteLine(item.StuNo);
                }
      

  17.   

    要是有兴趣,把any contains join等等的写法也练习下,不考虑性能,可以写出很多种查询。
      

  18.   

    select * from stuInfo where stuNo not in(select stuNo from StuMarks)
    Lambda:
    var query=stuInfo.where(st=> ! StuMarks.where(s=>s.stuNo==st.stuNo).any()).toList()