LINQ:返回空字符串/ null而不是System.InvalidOperationException错误

时间:2015-04-07 20:10:31

标签: c# asp.net-mvc linq

我有这个linq查询:

string appuserid = (from c in db.AppUsers
                          where (c.AppUserID == AppUserId)
                          select c.AppUserID).Single().ToString();

让我们说db

中不存在testuser1

如果我让AppUserId = testuser1得到:

  

System.InvalidOperationException。

我的问题是,是否有重写此查询以避免此错误并可能返回空字符串或让它为空?我需要返回一些我可以写出一些逻辑的东西。

3 个答案:

答案 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的项,则抛出异常。此外,如果序列中没有谓词为真的任何项目,您将获得投影项目的默认值。