2013-08-08 30 views
5

tôi đang cố gắng để giải quyết một lỗi với việc sử dụng LINQ. Tôi đang kéo một giá trị nút XML bằng cách sử dụng LINQ. Vấn đề tôi đang gặp phải là khi nút không có trong XML, tôi nhận được lỗi Sequence contains no elements. tôi đã cố gắng sử dụng DefaultIfEmpty, Singleordefault, và FirstOrDefault. Nhưng sau đó nó ném một ngoại lệ nullpointer. Tôi đoán tôi không ở trên phương pháp chính xác. Làm cách nào để sử dụng một trong số này để giải bài toán?LINQ: Chuỗi không chứa yếu tố lỗi

Dưới đây là mã LINQ mà tôi đang sử dụng.

var costnode6 = doc.Root.Descendants(ns + "SERVICEUPGRADES").Single(c => (string)c.Element(ns + "DELIVERYTIME") == "before 3:30 PM").Element(ns + "TOTAL_COST"); 
     var cost6 = (decimal)costnode6; 

Trả lời

6

Phương thức OrDefault trả về giá trị mặc định cho loại nếu không có kết quả, trong trường hợp của bạn là null. Điều đó có nghĩa khi bạn làm một .Element(ns + "TOTAL_COST") sau cuộc gọi đó, bạn sẽ nhận được lỗi Sequence contains no elements nếu sử dụng Single hoặc một Null Reference Exception nếu sử dụng SingleOrDefault.

gì bạn cần làm là kéo các cuộc gọi ra ngoài và kiểm tra kết quả chống null:

var deliveryTime = doc.Root.Descendants(ns + "SERVICEUPGRADES") 
    .SingleOrDefault(c => (string)c.Element(ns + "DELIVERYTIME") == "before 3:30 PM"); 
if(deliveryTime != null) 
{  
    var costnode6 = deliveryTime.Element(ns + "TOTAL_COST"); 
    var cost6 = (decimal)costnode6; 
} 
+0

Đó worked..thanks !! – user2574121

3

Sử dụng SingleOrDefault, nhưng sau đó có một điều khoản bảo vệ trước khi cố gắng sử dụng costnode6, như thế này:

var costnode6 = doc.Root.Descendants(ns + "SERVICEUPGRADES").SingleOrDefault(c => (string)c.Element(ns + "DELIVERYTIME") == "before 3:30 PM").Element(ns + "TOTAL_COST"); 

if(costnode6 != null) 
{ 
    var cost6 = (decimal)costnode6; 
} 

này sẽ bảo vệ truy vấn LINQ của bạn từ thổi lên, bởi vì OrDefault sẽ làm cho kết quả truy vấn null nếu không tìm thấy chính xác một kết quả; và điều kiện if sẽ bảo vệ bạn khỏi cố gắng sử dụng một đối tượng null.

Các vấn đề liên quan