2016-12-13 4 views
-1

У меня есть две таблицы:Запрос Linq не может преобразовать double в double?

  1. AllPhonBills
  2. PersonalNumbers

Я хочу, чтобы запросить все записи из первой таблицы, в которых существуют числа в таблице 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; 

Я получаю сильфона ошибку:

Argument 1: Cannot convert from 'double?' to 'double'

Может кто-нибудь сказать мне, как исправить эту ошибку

+2

OT: Вы хранить номера телефонов, как 'double' ?! Возможно, вы захотите пересмотреть ... –

ответ

0

Это происходит потому, что в вашем базы данных, у вас есть столбец типа double, но этот тип данных может быть нулевым. Вы не можете сравнить double с двойным номером с двойным значением, не равным null. Вы можете извлечь выгоду из чтения this msdn page

1

Первый аргумент является нулевым double, и он не может быть автоматически превращен в double.

Вы должны сделать что-то с нулями в последовательности обнуляемого типов, например:

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

Либо одна переменная в коде или поле в вашей БД обнуляемым («?», Следовательно), что вызывает вашу проблему.

0

Я решить мою проблему, используя Регистрация ниже запрос мой код:

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 
            }; 
Смежные вопросы