测试 LINQ 返回单一实体 (ElementAt, ElementAtOrDefault, First, FirstOrDefault, Single, SingleOrDefault)

创建时间:
2014-02-28 17:00
最近更新:
2018-10-12 14:11
static void Main(string[] args) {
	long id = 1;
	var pw = new byte[16];
	var db = new CmsEntities();
	var v = from e in db.LoginCkOfStaffs
			where e.Id == id && e.Pw == pw
			select e;

	//LoginCkOfStaff loginCkOfStaff0 = v.ElementAt(0); //抛出异常:LINQ to Entities 不识别方法 "Csl_Net45.Edm.LoginCkOfStaff ElementAt[LoginCkOfStaff](System.Linq.IQueryable`1[Csl_Net45.Edm.LoginCkOfStaff], Int32)",因此该方法无法转换为存储表达式。

	//LoginCkOfStaff loginCkOfStaff1 = v.ElementAtOrDefault(0); //抛出异常:LINQ to Entities 不识别方法 "Csl_Net45.Edm.LoginCkOfStaff ElementAtOrDefault[LoginCkOfStaff](System.Linq.IQueryable`1[Csl_Net45.Edm.LoginCkOfStaff], Int32)",因此该方法无法转换为存储表达式。

	//LoginCkOfStaff loginCkOfStaff2 = v.First(); //抛出异常:序列不包含任何元素。

	LoginCkOfStaff loginCkOfStaff3 = v.FirstOrDefault(); //如数据库中无符合 where 的记录则返回 null。备忘:生成的 SQL 命令中使用了 SELECT TOP (1)。

	//LoginCkOfStaff loginCkOfStaff4 = v.Single(); //抛出异常:序列不包含任何元素。

	LoginCkOfStaff loginCkOfStaff5 = v.SingleOrDefault(); //如数据库中无符合 where 的记录则返回 null。备忘:生成的 SQL 命令中使用了 SELECT TOP (2),如果数据库真的返回了 2 条记录它将抛出异常。
}