我在这个三元线上遇到了麻烦:
var userFromContext = IsOwner ? db.Owners.Where(o => o.UserName == username)
: db.Users.Where(u => u.UserName == username);
它给了我这个错误信息:
无法确定条件表达式的类型,因为System.LINQ.IQueryable<Owners>
和System.LINQ.IQueryable<Users>
之间没有隐式转换。
如果我将它分配给var变量,为什么要关心呢?
答案 0 :(得分:11)
因为变量必须属于某种类型。
“var
”并不代表“无类型”。这意味着“亲爱的编译器,请根据我指定给它的表达式找出这个变量的类型”。
为了做到这一点,编译器必须首先理解表达式的类型,并且它不能这样做,因为你的三元运算符的两个分支是不同的类型。
答案 1 :(得分:3)
三元运算符必须具有特定的,通用的返回类型。你可以通过将它们都转换为IEnumberable
来解决这个问题。
答案 2 :(得分:3)
因为var
只是静态类型的占位符。 类型在编译时已知。如果类型取决于数据,则编译器无法知道它是什么类型。如果您真的想使用上述构造,请使用dynamic
关键字而不是var:
dynamic userFromContext = IsOwner ? db.Owners.Where(o => o.UserName == username)
: db.Users.Where(u => u.UserName == username);