使用 Linq 确定特定查询是否生成任何结果或具有任何结果
本文关键字:任何 结果 是否 Linq 查询 使用 | 更新日期: 2023-09-27 18:34:21
我有一个特定的函数,可以检查特定行是否与查询条件匹配。如果是这样,那么我检索值并将其存储在我的变量中,如果它没有值,我插入它。但是我有一个 try{} 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();
}
}
欢迎任何建议。谢谢。
你应该使用 .SingleOrDefault()
select app.NewValue).SingleOrDefault();
if (appno == null)
{
InsertApplicationNo();
}
else
{
..
}
如果没有结果,则返回 null。
您应该改用.Any()
扩展方法:
dt.sys_Keys.Any(app.TableName == TableName && app.BranchNo.ToString() == BranchNo)
这将返回一个布尔值,因此您可以使用它轻松构建 if/else 块。
我认为这不是
在捕获部分中处理此问题的好方法。如果您遇到任何其他类型的异常怎么办?
尝试检查 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)
{
}
}