我在跟踪LINQ语句时遇到错误
错误
"无法将隐式转换为bool类型转换为字符串
string UserId = Context.Users.Where(x => x.UserName == username).FirstOrDefault(x => x.Id);
这里有什么问题?
答案 0 :(得分:5)
如果您只想这样的身份
string UserId = Context.Users.Where(x => x.UserName == username).Select(g=> g.Id.ToString()).FirstOrDefault();
如果您希望用户像这样对象
var Usersobj=Context.Users.Where(x => x.UserName == username).FirstOrDefault();
答案 1 :(得分:3)
您需要检查用户是否存在提供的用户名,否则将引发空引用异常;
string id = string.Empty;
User user = Context.Users.FirstOrDefault(x => x.UserName == username);
if(user != null)
{
id=user.Id.ToString(); //if id is already a string no need for ToString()
}
或c#6的单行;
string userId = Context.Users.FirstOrDefault(x => x.UserName == username)?.Id.ToString();
答案 2 :(得分:0)
我会用:
string UserId = Context.Users.Where(x => x.UserName == username).Select(s => s.Id).DefaultIfEmpty(String.Empty).FirstOrDefault();
答案 3 :(得分:0)
x => x.Id用于枚举集合并应用条件来检查哪一个匹配,然后返回第一个匹配。
如果FirstOrDefault<Tsource>
为空,则<Tsource>
为源中的第一个元素。
这里FirstOrDefault仅通过传递id,所以使用x =&gt; x.Id == id
var user = Context.Users.Where(x => x.UserName == Username ).FirstOrDefault(x=>x.Id==id)
或
string UserId = Context.Users.Where(x => x.UserName == Username ).FirstOrDefault(x=>x.Id==id).ToString();