Tôi đang cố tạo mệnh đề LINQ OrderBy
sử dụng biểu thức lambda với đầu vào của tên cột của thực thể dưới dạng chuỗi (trong biến "sortOn" bên dưới).Xây dựng đơn hàngBiểu thức Lambda dựa trên thuộc tính của thực thể con
Đoạn code dưới đây hoạt động tốt cho một giá trị sortOn như "Code" tạo ra lambda
p => p.Code
Nhưng tôi cũng muốn sắp xếp vào một tổ chức trẻ em, nơi lambda có thể
p => p.Category.Description
Vì vậy, trong trường hợp này, tôi chỉ muốn thiết lập sortOn = "Category.Description" và có biểu thức chính xác lamdba được tạo ra.
Điều này có khả thi không? Bất kỳ đề xuất về cách tốt nhất để làm điều này sẽ được hoan nghênh.
Mã này hoạt động tốt đối với trường hợp đơn giản:
var param = Expression.Parameter(typeof (Product), "p");
var sortExpression = Expression.Lambda<Func<Product, object>>(
Expression.Property(param, sortOn), param);
if (sortAscending ?? true)
{
products = products.OrderBy(sortExpression);
}
else
{
products = products.OrderByDescending(sortExpression);
}
Việc sử dụng hợp cụ thể cho vấn đề này được hiển thị một mạng lưới các dữ liệu và có thể sắp xếp dữ liệu, chỉ đơn giản bằng cách truyền tên cột được sắp xếp quay trở lại máy chủ. Tôi muốn làm cho các giải pháp chung chung, nhưng đã bắt đầu sử dụng một loại cụ thể (sản phẩm trong ví dụ) cho bây giờ.
Tại sao bạn tạo biểu thức theo cách thủ công? –