我刚问了这个问题.这引出了我一个新问题:)
到目前为止,我使用了以下使用Linq to SQL选择内容的模式,目的是能够处理查询返回的0"行":
var person = (from p in [DataContextObject].Persons where p.PersonsID == 1 select new p).FirstOrDefault(); if (person == null) { // handle 0 "rows" returned. }
但是FirstOrDefault()
当我这样做时我无法使用:
var person = from p in [DataContextObject].Persons where p.PersonsID == 1 select new { p.PersonsID, p.PersonsAdress, p.PersonsZipcode }; // Under the hood, this pattern generates a query which selects specific // columns which will be faster than selecting all columns as the above // snippet of code does. This results in a performance-boost on large tables.
如何使用第二种模式检查查询返回的0"行"?
更新:
我认为我的构建失败是因为我试图将查询结果分配给this._user
使用类型声明的变量()[DataContext].User
.
this._user = (from u in [DataContextObject].Users where u.UsersID == [Int32] select new { u.UsersID }).FirstOrDefault();
编译错误:无法将类型"AnonymousType#1"隐式转换为"[DataContext] .User".
有关如何解决这个问题的任何想法?我必须制作自己的物品吗?
为什么你能继续做同样的事情?它给你一个错误吗?
var person = (from p in [DataContextObject].Persons where p.PersonsID == 1 select new { p.PersonsID, p.PersonsAdress, p.PersonsZipcode }).FirstOrDefault(); if (person == null) { // handle 0 "rows" returned. }
它仍然是一个与实际对象一样的引用对象,它只是匿名的,所以在编译代码之前你不知道实际的类型.