我在这里收到施法错误,但我不明白为什么。
protected bool isPlayerdb(string userName)
{
try
{
Users adminUsers = from users in SoccerEntities.Users
where users.roleId == new Guid("ED85788D-72DA-4D0A-8D5E-B5378FC00592")
&& users.UserName == userName
select users;
if (adminUsers != null)
return true;
else
return false;
}
catch (Exception ex)
{
throw new EntityContextException("isPlayer failed.", ex);
}
}
调试器出错:
错误11无法隐式转换类型
'System.Linq.IQueryable<soccerCmsDal.Users>'
到'soccerCmsDal.Users'。存在显式转换(您是否缺少演员?)C:\ new code \ UniteCms \ UniteCms \ soccerCmsDal \ SocerDataAccess.cs 80 23 soccerCmsDal
答案 0 :(得分:8)
如果您只需要一条记录,请使用FirstOrDefault或SingleOrDefault:
Users adminUsers = (from users in SoccerEntities.Users
where users.roleId == new Guid("ED85788D-72DA-4D0A-8D5E-B5378FC00592") && users.UserName == userName
select users).FirstOrDefault();
如果您需要检查,如果播放器存在,您可以使用Any:
bool exists = (from users in SoccerEntities.Users
where users.roleId == new Guid("ED85788D-72DA-4D0A-8D5E-B5378FC00592") && users.UserName == userName
select users).Any();
答案 1 :(得分:3)
您要求将序列值分配给单个实体变量。这就像尝试这样做:
// Won't work for the same reason
string name = new List<string> { "foo", "bar" };
如果你只是试图找出是否有任何结果,你可以使用Any
- 并且过度使用谓词作为参数,所以你不要#&# 39;根本不需要查询表达式。
此外,只要您发现自己写作:
if (condition)
return true;
else
return false;
你可以使用:
if (condition)
所以我们最终得到:
protected bool isPlayerdb(string userName)
{
try
{
return SoccerEntities
.Users
.Any(user => user.roleId == new Guid("ED85788D-72DA-4D0A-8D5E-B5378FC00592")
&& user.UserName == userName)
}
catch (Exception ex)
{
throw new EntityContextException("isPlayer failed.", ex);
}
}
请注意:
PlayerExists
而不是Exception
很少是一个好主意,IME - 考虑捕捉更具体的例外users
(查询表达式中的范围变量名称)更改为user
,因为谓词作用于< em>单个用户。命名对于清晰的代码很重要 - 明确表示您是否正在处理单个实体或多个实体有助于提高可读性。 (这种混乱是导致编译时失败的原因。)