linq语句出错

时间:2015-06-30 06:35:31

标签: c# linq

我在跟踪LINQ语句时遇到错误

错误

  

"无法将隐式转换为bool类型转换为字符串

string UserId = Context.Users.Where(x => x.UserName == username).FirstOrDefault(x => x.Id);

这里有什么问题?

4 个答案:

答案 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 =&gt; 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();