2009-07-14 4 views
1

Возможно ли использовать LINQ для извлечения списка, который может содержать нули.Получить список, содержащий NULLS с Linq

Например, если у меня есть левое внешнее соединение, например, так:

var query= from c in db.Customers 
       join o in db.Orders 
        on c.CustomerID equals o.CustomerID into sr 
       from x in sr.DefaultIfEmpty() 
       select x.OrderId; 

Как попасть в список, который может выглядеть как {12,13, нуль, 14, нулевой, 11,16,17 }?

Это не работает для меня:

query.ToList<decimal?>(); 

Возможно ли это?

+0

Вы не объясните, что вы хотите, чтобы эти 'null' соответствовали. Клиенты без заказов? –

ответ

1

ЖХ является правильным, но это немного чище просто просто выберите свой тип с нулевым типом.

var query= from c in db.Customers 
       join o in db.Orders 
        on c.CustomerID equals o.CustomerID into sr 
       from x in sr.DefaultIfEmpty() 
       select (decimal?)x.OrderId; 
3

Проблема x.OrderId будет бросать NullReferenceException, когда x - null. Вам нужно проверить нуль сначала, а затем вернуть свойство, если есть объект. Например

select x == null ? (decimal?)null : x.OrderId; 

OrderId не совсем звучит, как это должно быть десятичным, хотя ...

+0

Спасибо! Это натолкнуло меня на некоторое время. Цените свой ответ. – dan

0

Try:

 
var query 
    = from c in db.Customers 
     join o in db.Orders 
     on c.CustomerID equals o.CustomerID into sr 
     select (sr != null : sr.OrderId : null); 
+0

Выбор должен быть выбран (sr! = Null? Sr.OrderId: null); –