Linq to Sql ------------------------复习(二)

类中的代码
  1 using System;

  2 using System.Collections.Generic;

  3 using System.Linq;

  4 using System.Text;

  5 

  6 namespace LinqTest

  7 {

  8 class LinqDemo_2

  9 {

 10 static void Main(string[] args)

 11 {

 12 StudentDBDataContext db = new StudentDBDataContext("server=.;uid=sa;pwd=123456;database=studentdb");

 13 #region Any/All/Contains操作符

 14 //返回没有参加考试的学生

 15 //Console.WriteLine("No\t"+"Name\t"+"Age");

 16 //foreach (var item in (from stu in db.stuInfo select stu))

 17 //{

 18 // Console.WriteLine(item.stuNo + "\t" + item.stuName + "\t" + item.stuAge);

 19 //}

 20 //Console.WriteLine();

 21 

 22 //var sql1 = from stu in db.stuInfo where !stu.stuMarks.Any() select stu;

 23 //Console.WriteLine(sql1);

 24 //foreach (var item in sql1)

 25 //{

 26 // Console.WriteLine(item.stuNo+"\t"+item.stuName+"\t"+item.stuAge);

 27 //}

 28 

 29 

 30 //Any:用于判断集合中是否有元素满足某一条件

 31 //var sql = from s in db.stuInfo

 32 // where !s.stuMarks.Any()

 33 // select s;

 34 //foreach (var s in sql)

 35 //{

 36 // Console.WriteLine("学生姓名:{0}", s.stuName);

 37 //}

 38 

 39 //ALL:用于判断集合中所有元素是否都满足某一条件

 40 

 41 Console.WriteLine("\n");

 42 var sql2 = from stu in db.stuInfo where stu.stuMarks.All(sm => sm.stuNo != stu.stuNo) select stu;

 43 Console.WriteLine(sql2);

 44 foreach (var item in sql2)

 45 {

 46 Console.WriteLine(item.stuNo + "\t" + item.stuName + "\t" + item.stuAge);

 47 }

 48 

 49 Console.WriteLine();

 50 Console.WriteLine("no"+"\tLabExam"+"\tWrittenExam");

 51 foreach (var item in (from sm in db.stuMarks select sm))

 52 {

 53 Console.WriteLine(item.stuNo+"\t"+item.LabExam+"\t"+item.writtenExam);

 54 }

 55 //var sql = from s in db.stuInfo

 56 // where s.stuMarks.All(sc => sc.stuNo != s.stuNo)

 57 // select s;

 58 //foreach (var s in sql)

 59 //{

 60 // Console.WriteLine("学生姓名:{0}", s.stuName);

 61 //}

 62 

 63 // Contains子查询形式

 64 Console.WriteLine("Contains");

 65 var sql3 = from stu in db.stuInfo where !(from sm in db.stuMarks select sm.stuNo).Contains(stu.stuNo) select stu;

 66 Console.WriteLine("No\t" + "Name\t" + "Age");

 67 foreach (var item in sql3)

 68 {

 69 Console.WriteLine(item.stuNo + "\t" + item.stuName + "\t" + item.stuAge);

 70 }

 71 #endregion

 72 

 73 #region SelectMany 连接查询

 74 //SelectMany类型:我们在写查询语句时,如果被翻译成SelectMany需要满足2个条件。1:查询语句中没有join和into,2:必须出现EntitySet。在我们表关系中有一对一关系,一对多关系,多对多关系等

 75 //第一种形式:常规形式

 76 var sql4 = from stu in db.stuInfo

 77 from sm in db.stuMarks

 78 where stu.stuNo==sm.stuNo

 79 select new

 80 {

 81 姓名 = stu.stuName,

 82 笔试 = sm.writtenExam,

 83 机试 = sm.LabExam

 84 };

 85 Console.WriteLine("姓名\t"+"笔试\t"+"机试");

 86 foreach (var item in sql4)

 87 {

 88 Console.WriteLine(item.姓名+"\t"+item.笔试+"\t"+item.机试);

 89 }

 90 

 91 

 92 //第二种形式:SelectMany查询形式

 93 Console.WriteLine();

 94 var sql5 = from stu in db.stuInfo

 95 from sm in stu.stuMarks

 96 select new

 97 {

 98 姓名 = stu.stuName,

 99 笔试 = sm.writtenExam,

100 机试 = sm.LabExam

101 };

102 Console.WriteLine("姓名\t" + "笔试\t" + "机试");

103 foreach (var item in sql5)

104 {

105 Console.WriteLine(item.姓名 + "\t" + item.笔试 + "\t" + item.机试);

106 }

107 //var sql = from s in db.stuInfo

108 // from sc in s.stuMarks

109 // select new

110 // {

111 // 姓名 = s.stuName,

112 // 笔试 = sc.writtenExam,

113 // 机试 = sc.LabExam

114 // };

115 //Console.WriteLine(sql);

116 

117 //第三种:简化形式

118 Console.WriteLine();

119 var sql6 = from sm in db.stuMarks

120 select new

121 {

122 姓名 = sm.stuInfo.stuName,

123 笔试 = sm.writtenExam,

124 机试 = sm.LabExam,

125 班级= sm.stuInfo.classic.className

126 };

127 Console.WriteLine("姓名\t" + "笔试\t" + "机试");

128 foreach (var item in sql6)

129 {

130 Console.WriteLine(item.姓名 + "\t" + item.笔试 + "\t" + item.机试+"\t"+item.班级);

131 }

132 //var sql = from s in db.stuInfo

133 // where s.classic.className == "T102"

134 // select s;

135 //Console.WriteLine(sql);

136 //foreach (var s in sql)

137 //{

138 // Console.WriteLine("学生姓名:{0},所在班级:{1}", s.stuName, s.classic.className);

139 //}

140 

141 //第四种:多对多的查询形式

142 //var sql = from s in db.stuInfo

143 // from sc in s.stuMarks

144 // select new

145 // {

146 // s.stuName,

147 // s.classic.className,

148 // sc.writtenExam,

149 // sc.LabExam

150 // };

151 //Console.WriteLine(sql);

152 //foreach (var s in sql)

153 //{

154 // Console.WriteLine("学生姓名:{0},所在班级:{1},笔试:{2},机试:{3}", s.stuName, s.className, s.writtenExam, s.LabExam);

155 //}

156 

157 Console.WriteLine("SelectMany");

158 var sql7 = db.stuInfo.SelectMany(s => s.stuMarks);

159 Console.WriteLine(sql7);

160 foreach (var item in sql7)

161 {

162 Console.WriteLine(item.stuNo+"\t"+item.LabExam+"\t"+item.writtenExam+"\t");

163 }

164 #endregion

165 Console.WriteLine("aaaaaa");

166 //var sql8 = from stu in db.stuInfo

167 // join c in db.classic

168 // on stu.classID equals c.classID

169 // into s

170 // from ss in s.DefaultIfEmpty()

171 // select new

172 // {

173 // stu.stuNo,

174 // stu.stuName,

175 // stu.classID,

176 // count = s.Count(),

177 // ss.className

178 // };

179 //var sql8 = from c in db.classic

180 // join s in db.stuInfo

181 // on c.classID equals s.classID

182 // into cs

183 // from stu in cs.DefaultIfEmpty()

184 // select new

185 // {

186 

187 // stu.stuNo,

188 // stu.stuName,

189 // c.classID,

190 // c.className

191 // };

192 

193 //foreach (var item in sql8)

194 //{

195 // Console.WriteLine(item.stuNo + "\t" + item.stuName + "\t" + item.classID + "\t" + item.className);

196 //}

197 #region GroupJoin连接查询

198 //像上面所说的,没有join和into,被翻译成SelectMany,同时有join和into时,那么就被翻译为GroupJoin,

199 //如果在连接查询中,需要使用聚合函数,可以采用GroupJoin进行分组连接查询

200 //只有join,没有into形式,类似于inner..join..on

201 //var sql = from c in db.classic

202 // join s in db.stuInfo

203 // on c.classID equals s.classID //注意采用equals替换==

204 // select new

205 // {

206 // c.className,

207 // s.stuName

208 // };

209 //Console.WriteLine(sql);

210 

211 //左外部联接(Left Outer Join):

212 //var sql = from s in db.stuInfo

213 // join sc in db.stuMarks

214 // on s.stuNo equals sc.stuNo

215 // into ss //many端重新命名

216 // from o in ss.DefaultIfEmpty() //左连接,DefaultIfEmpty再次遍历右边,没有的学生默认为null

217 // select new

218 // {

219 // s.stuName,

220 // writtenExam = o.writtenExam==null?0:o.writtenExam,

221 // labExam = o.LabExam==null?0:o.LabExam

222 

223 // };

224 //Console.WriteLine(sql);

225 //foreach (var s in sql)

226 //{

227 // Console.WriteLine("姓名:{0},笔试:{1},机试:{2}",s.stuName,s.writtenExam,s.labExam);

228 //}

229 

230 //三向连接

231 //var sql = from c in db.classic

232 // join s in db.stuInfo

233 // on c.classID equals s.classID

234 // join sc in db.stuMarks

235 // on s.stuNo equals sc.stuNo

236 // select new

237 // {

238 // c.className,

239 // s.stuName,

240 // sc.writtenExam,

241 // sc.LabExam

242 // };

243 //Console.WriteLine(sql);

244 //foreach (var s in sql)

245 //{

246 // Console.WriteLine("学生姓名:{0},所在班级:{1},笔试:{2},机试:{3}", s.className, s.stuName, s.writtenExam, s.LabExam);

247 //}

248 

249 //双向联接(Two way join):

250 //var sql = from c in db.classic

251 // join s in db.stuInfo

252 // on c.classID equals s.classID

253 // into stu

254 // select new

255 // {

256 // className = c.className,

257 // count = stu.Count()

258 // };

259 //Console.WriteLine(sql);

260 //foreach (var s in sql)

261 //{

262 // Console.WriteLine("班级:{0},人数:{1}", s.className, s.count);

263 //}

264 #endregion

265 }

266 }

267 }
View Code

数据库中的代码和Linq to Sql ------------------------复习(一)是相同的

你可能感兴趣的:(LINQ)