C#LINQ存储int?as int
我正在查询数据库以获取contractorid字段值,该值将返回一个值或null。 我需要将其作为整数传递给类方法(int,int)。但显然,它与最佳重载方法不匹配。我怀疑是因为C#LINQ存储int?as int,c#,.net,linq,C#,.net,Linq,我正在查询数据库以获取contractorid字段值,该值将返回一个值或null。 我需要将其作为整数传递给类方法(int,int)。但显然,它与最佳重载方法不匹配。我怀疑是因为int?contractorid值可能为null,并且无法转换为整数。但是,如果我删除?并只使用int,那么我会在linq中得到关于single()方法的错误 int UserID = new BussinessComponent().LoginDetails.UserID; using (var db
int?
contractorid值可能为null,并且无法转换为整数。但是,如果我删除?
并只使用int,那么我会在linq中得到关于single()
方法的错误
int UserID = new BussinessComponent().LoginDetails.UserID;
using (var db = new DataContext())
{
int? ContractorID =
db
.Users
.Where(x => x.UserID == UserID)
.Select(x => x.ContractorID)
.Single();
ltlOJ.Text = DashboardComponent.GetJobs(UserID,ContractorID ).ToString();
}
试一试
}
当数据库中的
int为空时,这会将ContracterId
局部变量设置为0
,实际上,您需要将int?
转换为int
,因为null不能转换为int
可以使用为您提供默认值来执行此操作
ltlOJ.Text = DashboardComponent.GetJobs(UserID, ContractorID.GetValueOrDefault(0))
.ToString();
如果找不到匹配项,Single()方法将抛出异常。你应该考虑使用SunLeOrdError()/P>< P>你可以做这样的工作。
int? ContractorID = db
.Users
.Where(x => x.UserID == UserID)
.Select(x => x.ContractorID)
.Single() ?? -1;
int parsedValue = ContractorID.Value;
或者也许
int? ContractorID = db
.Users
.Where(x => x.UserID == UserID)
.Select(x => x.ContractorID)
.Single()
if (ContractorID.HasValue)
ltlOJ.Text = DashboardComponent.GetJobs(UserID,ContractorID ).ToString();
else
// Traitment if contractorId has no value.
祝你好运;-) 我想你是在处理Single()
在你脸上爆炸的案件吧Single()
只有在找到一个匹配项时才会高兴。即0场比赛和2场比赛将使它爆炸
int UserID = new BussinessComponent().LoginDetails.UserID;
using (var db = new DataContext())
{
int? ContractorID =
db
.Users
.Where(x => x.UserID == UserID)
.Select(x => x.ContractorID)
.Single();
if (ContractorID.HasValue) // check for value, since it is nullable it can be null
ltlOJ.Text = DashboardComponent.GetJobs(UserID, ContractorID.Value).ToString();
else
throw new MyReasonableExceptionToThrowHere(string.Format("Missing ContractorID for UserID '{0}'", UserID));
}
对于int?
本身,由于它是一个可为null的函数,因此必须将其取消装箱以获取内部值,这就是调用nullable.value
时所做的操作。请注意,Nullable.Value
抛出如果该值为null,则您应该始终在之前检查Nullable.HasValue
。尝试SingleOrDefault()将函数作为DashboardComponent.GetJobs调用。@ssilas777SingleOrDefault
指返回的行数,而不是值。因此,您可以返回一个值,但该值可以是null
。
int UserID = new BussinessComponent().LoginDetails.UserID;
using (var db = new DataContext())
{
int? ContractorID =
db
.Users
.Where(x => x.UserID == UserID)
.Select(x => x.ContractorID)
.Single();
if (ContractorID.HasValue) // check for value, since it is nullable it can be null
ltlOJ.Text = DashboardComponent.GetJobs(UserID, ContractorID.Value).ToString();
else
throw new MyReasonableExceptionToThrowHere(string.Format("Missing ContractorID for UserID '{0}'", UserID));
}