Tôi đang sử dụng hàm orderq linq động này mà tôi nhận được từ here.Thứ tự linq động theo thuộc tính lồng nhau với thuộc tính null
này hoạt động tốt với các thuộc tính lồng nhau vì vậy tôi có thể làm điều này:
var result = data.OrderBy("SomeProperty.NestedProperty");
Vấn đề là nếu SomeProperty là null sau đó thực hiện OrderBy trên NestedProperty ném "tài liệu tham khảo đối tượng khét tiếng không được đặt để một thể hiện của một đối tượng".
tôi đoán là tôi cần để tùy chỉnh các dòng sau để xử lý các ngoại lệ:
expr = Expression.Property(expr, pi);
// Or
LambdaExpression lambda = Expression.Lambda(delegateType, expr, arg);
Tôi nghĩ về việc tạo ra một cơ thể tuyên bố nơi tôi có thể trong trường hợp xấu nhất sử dụng một catch nhưng điều đó didn' Nếu bạn không thể có các câu lệnh trong câu lệnh linq: "Biểu thức lambda có thân xác nhận không thể chuyển thành cây biểu thức"
Tôi bị mất ở đây, mọi đề xuất về cách tôi có thể thực hiện điều này ?
Nhân tiện, điều này là dành cho LINQ đối tượng, không phải liên quan đến cơ sở dữ liệu.
Tôi đoán dòng này 'expr = Expression.Property (expr, pi);' bộ 'expr' null và mã hơn nữa không xử lý nó. Cách dễ nhất để sửa chữa nó là 'expr = Expression.Property (expr, pi) ?? mặc định (T); Tuy nhiên, bạn sẽ cần kiểm tra xem bạn có đồng ý với đơn đặt hàng được áp dụng trong trường hợp này hay không. – Tommi
Đó là một điểm tốt, thực sự sẽ làm cho công việc sắp xếp sai, lý tưởng là các giá trị rỗng phải được "nhóm lại" với nhau. –
xem nếu điều này giúp bạn trong bất kỳ cách nào http://stackoverflow.com/questions/41244/dynamic-linq-orderby-on-ienumerablet?lq=1 – Ehsan