我有一个特定的函数来检查特定的行是否与查询条件匹配。如果它确实存在,那么我检索该值并将其存储在我的变量中,如果它没有值我插入它。但是我有一个尝试{ } 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();
}
}
欢迎任何建议。 感谢。
答案 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)
{
}
}