Linq查询无法将double转换为double?

时间:2016-12-13 18:19:00

标签: c# asp.net-mvc linq

我有两张桌子:

  1. AllPhonBills
  2. PersonalNumbers
  3. 我想查询第一个表中所有记录,其中数字存在于PersonalNumbers表或列表中。

    贝娄是我的代码:

    var GetMyPersonalNumbers = db.MyPersonalNumContext.Where(i => i.EmployeeId == My_Emp_Id).Select(n => n.PersonalNumber).ToList();
    
    var GetAllPersonalCalls = from c in db.MyAllPhoneBillContext
                                          where GetMyPersonalNumbers.Contains(c.CALLED_NUMBER)
                                          select c;
    

    我收到了以下错误:

      

    参数1:无法从'double?'转换'加倍'

    任何人都可以告诉我如何修复此错误

4 个答案:

答案 0 :(得分:1)

第一个参数可以为double,并且无法自动转换为double

您必须在可空类型的序列中对空值执行某些操作,例如:

IEnumerable<double> result = 
    sequence.Where(x => x.HasValue).Select(x => x.Value);

答案 1 :(得分:0)

这是因为在您的数据库中,您有一个double类型的列,但该数据类型可以为null。您无法将可空双精度值与非可空双精度数进行比较。您可以从阅读this msdn page

中受益

答案 2 :(得分:0)

代码中的一个变量或数据库中的字段都可以为空(因此是“?”),这会导致您的问题。

答案 3 :(得分:0)

我通过使用Join查询解决了我的问题,下面是我的代码:

   var GetAllPersonalCalls = from c in db.MyAllPhoneBillContext
                                  join p in db.MyPersonalNumContext on c.CALLED_NUMBER equals p.PersonalNumber
                                  where c.CALLING_NUMBER == My_Number
                                  where c.CALL_DATE.Year == currentYear
                                  where c.CALL_DATE.Month == currentMonth
                                  select new PhoneBillVM
                                  {
                                      CALLING_NUMBER = c.CALLING_NUMBER,
                                      CALLED_NUMBER = c.CALLED_NUMBER,
                                      CALL_DURATION = c.CALL_DURATION,
                                      CustomTime = c.CALL_TIME.Hour + ":" + c.CALL_TIME.Minute + ":" + c.CALL_TIME.Second,
                                      CALL_COST = c.CALL_COST,
                                      CALL_DATE = c.CALL_DATE
                                  };