使用Linq确定特定查询是否产生任何结果或是否有任何结果

时间:2012-05-17 06:46:27

标签: c# linq-to-sql

我有一个特定的函数来检查特定的行是否与查询条件匹配。如果它确实存在,那么我检索该值并将其存储在我的变量中,如果它没有值我插入它。但是我有一个尝试{ } catch {}块确定它是否存在。如果它进入catch块,我调用一个函数,它将在该表中插入一条记录,我想知道这种方法是否合适,在catch中调用一个函数块,没关系,有什么可以找出我的查询是否返回结果。这是我的代码

public void CheckApplicationNo(string TableName,string BranchNo)
    {
        try
        {
            var appno = (from app in dt.sys_Keys
                         where app.TableName == TableName && app.BranchNo.ToString() == BranchNo
                         select app.NewValue).Single();

                Global.ApplicationNo = appno.ToString();
                UpdateApplicationNo("Data_Customer_Log", Global.BranchNo);
        }

        catch (Exception ex)
        {

            InsertApplicationNo(); 
        }


    }

欢迎任何建议。 感谢。

3 个答案:

答案 0 :(得分:2)

你应该使用.SingleOrDefault()

select app.NewValue).SingleOrDefault(); 

    if (appno == null)
    {
      InsertApplicationNo();  
    }
    else
    {
     ..
    }

如果没有结果,则返回null。

答案 1 :(得分:1)

您应该使用.Any()扩展方法:

dt.sys_Keys.Any(app.TableName == TableName && app.BranchNo.ToString() == BranchNo)

这将返回一个布尔值,因此您可以轻松地使用它构建一个if / else块。

答案 2 :(得分:1)

我认为在catch部分处理这个问题不是一个好方法。如果您遇到任何其他类型的例外该怎么办?

尝试检查if else语句中是否存在appno而不是使用例外。

public void CheckApplicationNo(string TableName,string BranchNo)
    {
        try
        {
            var appno = (from app in dt.sys_Keys
                         where app.TableName == TableName && app.BranchNo.ToString() == BranchNo
                         select app.NewValue).SingleOrDefault();
            if(appno == null)
                InsertApplicationNo();
            else
            {
                Global.ApplicationNo = appno.ToString();
                UpdateApplicationNo("Data_Customer_Log", Global.BranchNo);
            }
    }

    catch (Exception ex)
    {


    }


}