Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#LINQ存储int?as int_C#_.net_Linq - Fatal编程技术网

C#LINQ存储int?as 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

我正在查询数据库以获取contractorid字段值,该值将返回一个值或null。 我需要将其作为整数传递给类方法(int,int)。但显然,它与最佳重载方法不匹配。我怀疑是因为
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调用。@ssilas777
SingleOrDefault
指返回的行数,而不是值。因此,您可以返回一个值,但该值可以是
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));
}