none
First vs FirstOrDefault vs Single vs SingleOfDefault RRS feed

  • Вопрос

  • Добрый день

    Что в данном коде применить лучше? FirstOrDefault First SingleOrDefault Single

     var contract = (from c in db.Contracts
                                            where c.projectID == 12  
                                            select c).????;
    
                            if (contract != null)
                            {
    
                                _obs.collContract.NameContract = NullData.TXTNull(contract.nameContract);
                                _obs.collContract.NumberContract = NullData.TXTNull(contract.numberContract);
                               
                                _obs.collContract.DataContract = NullData.DATANull((DateTime)contract.dataContract);
    
                            }
                            else
                            {
                                _obs.collContract = new ContractData();
                                _obs.collContract.NameContract = "";
                                _obs.collContract.NumberContract = "";
                                _obs.collContract.DataContract = DateTime.Now;
                            }

    Вроде как надо FirstOrDefault если проверка на null

    Но опять в выборке contract не все поля могут значения. Некоторые могут быть NULL в базе.

    В таком случае вроде читал что применять First? Но тогда если вообще contract будет null то будет исключение?

    Что лучше?

    21 декабря 2016 г. 7:59

Ответы

  • использовать SingleOrDefault если наличие больше одного контракта с одним и тем же project id считается ошибкой, FirstOrDefault, если несколько контрактов это норма.

    при использовании First сгенерируется исключение, если контратка с заданным условием не будет найдено. соответственно при его использовании нужно будет обработать исключение (а лучше - просто предварительно проверить сколько записей вернул запрос)

    • Помечено в качестве ответа DevingAs 21 декабря 2016 г. 11:55
    21 декабря 2016 г. 9:27
  • Данные методы не генерируют исключение при наличии NULL в каких-то полях объектов. Они вообще не лезут во внутреннюю структуру объектов.
    • Помечено в качестве ответа DevingAs 21 декабря 2016 г. 11:54
    21 декабря 2016 г. 11:40

Все ответы

  • использовать SingleOrDefault если наличие больше одного контракта с одним и тем же project id считается ошибкой, FirstOrDefault, если несколько контрактов это норма.

    при использовании First сгенерируется исключение, если контратка с заданным условием не будет найдено. соответственно при его использовании нужно будет обработать исключение (а лучше - просто предварительно проверить сколько записей вернул запрос)

    • Помечено в качестве ответа DevingAs 21 декабря 2016 г. 11:55
    21 декабря 2016 г. 9:27
  • При First если будет найдена строчка из базы но в строчке будет одно из значений NULL что будет?

    Например ID=12, nameContract="gjksadhgkjf", numberContract="1212", sityContract=NULL,dataContract=2015.12.12 ...

    Что будет - исключение?

    И тоже самое при FirstOrDefault?

    21 декабря 2016 г. 10:23
  • Данные методы не генерируют исключение при наличии NULL в каких-то полях объектов. Они вообще не лезут во внутреннюю структуру объектов.
    • Помечено в качестве ответа DevingAs 21 декабря 2016 г. 11:54
    21 декабря 2016 г. 11:40