我有这个linq查询:
string appuserid = (from c in db.AppUsers
where (c.AppUserID == AppUserId)
select c.AppUserID).Single().ToString();
让我们说db
中不存在testuser1如果我让AppUserId = testuser1
得到:
System.InvalidOperationException。
我的问题是,是否有重写此查询以避免此错误并可能返回空字符串或让它为空?我需要返回一些我可以写出一些逻辑的东西。
答案 0 :(得分:2)
string appuserid = (from c in db.AppUsers
where (c.AppUserID == AppUserId)
select c.AppUserID).SingleOrDefault() ?? String.Empty;
这将返回一个空字符串。
答案 1 :(得分:1)
试试这个
string appuserid = (from c in db.AppUsers
where (c.AppUserID == AppUserId)
select c.AppUserID).SingleOrDefault();
如果没有找到元素,则返回null。
答案 2 :(得分:1)
您可以使用方法SingleOrDefault
。然后你可以检查你得到的是不是。
var appUser = (from c in db.AppUsers
where c.AppUserID == AppUserId
select c).SingleOrDefault();
if(appUser!=null)
var appUserId = appUser.AppUserID.ToString();
或更紧凑:
var appUser = db.AppUsers.SingleOrDefault(x=>x.AppUserID==AppUserId);
if(appUser!=null)
var appUserId = appUser.AppUserID.ToString();
方法SingleOrDefault
返回谓词(where子句中的表达式)为true的序列中的单个项。如果有多个谓词为true的项,则抛出异常。此外,如果序列中没有谓词为真的任何项目,您将获得投影项目的默认值。