我正在查询数据库以获取 contractorid 字段值,该值将返回一个值或null。
我需要将它作为整数传递给类方法(int,int)。但显然它与最佳超载方法不匹配。我怀疑它是因为int?
承包商的值可能为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();
}
答案 0 :(得分:8)
确实,您需要将int?
转换为int
,因为null无法转换为int。
您可以使用'GetValueOrDefault()`执行此操作以获得默认值。
ltlOJ.Text = DashboardComponent.GetJobs(UserID, ContractorID.GetValueOrDefault(0))
.ToString();
答案 1 :(得分:1)
尝试
int UserID = new BussinessComponent().LoginDetails.UserID;
using (var db = new DataContext())
{
int ContractorID =
db
.Users
.Where(x => x.UserID == UserID)
.Select(x => x.ContractorID ?? 0)
.Single();
ltlOJ.Text = DashboardComponent.GetJobs(UserID,ContractorID ).ToString();
}
当数据库中的空值
时,这会将ContracterId
局部变量设置为0
答案 2 :(得分:1)
你可以这样做。
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.
祝你好运; - )
答案 3 :(得分:0)
我认为你正在处理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?
本身,因为它是可以为空的,你必须将其取消以获取内部值,这就是你在调用Nullable<T>.Value
时所做的事情。请注意,如果值为null,则Nullable<T>.Value
会抛出,您是否应该始终使用Nullable<T>.HasValue
进行检查。
答案 4 :(得分:-1)
如果无法找到匹配项,Single()方法将抛出异常。你应该考虑使用SingleOrDefault()