Tôi đã hỏi very similar question ngày hôm qua, nhưng đến tận hôm nay tôi mới nhận ra câu trả lời tôi chấp nhận không giải quyết được tất cả các vấn đề của tôi. Tôi có đoạn mã sau:Làm cách nào để tạo một thuộc tính đa năng Chọn trên một số điện thoại có thể truy cập được là <T> khi chạy?
public Expression<Func<TItem, object>> SelectExpression<TItem>(string fieldName)
{
var param = Expression.Parameter(typeof(TItem), "item");
var field = Expression.Property(param, fieldName);
return Expression.Lambda<Func<TItem, object>>(field,
new ParameterExpression[] { param });
}
nào được sử dụng như sau:
string primaryKey = _map.GetPrimaryKeys(typeof(TOriginator)).Single();
var primaryKeyExpression = SelectExpression<TOriginator>(primaryKey);
var primaryKeyResults = query.Select(primaryKeyExpression).ToList();
này cho phép tôi để kéo ra khóa chính từ một IQueryable<TUnknown>
. Vấn đề là mã này chỉ hoạt động với một khóa chính và tôi cần thêm hỗ trợ cho nhiều PK. Vì vậy, có cách nào tôi có thể thích ứng với phương pháp SelectExpression
ở trên để lấy một IEnumerable<string>
(danh sách các tên thuộc tính khóa chính của tôi) và có phương thức trả lại một biểu thức chọn các khóa đó không? Không.
I.e. Với những điều sau:
var knownRuntimePrimaryKeys = new string[] { "CustomerId", "OrderId" }`
My Chọn cần phải làm như sau (khi chạy):
var primaryKeys = query.Select(x=> new { x.CustomerId, x.OrderId });
Vấn đề là loại vô danh mà là kết quả của statemet chọn được tạo ra tại thời gian biên dịch .. – m0sa
Có một thay thế cho việc sử dụng một loại Chưa xác định và vẫn đạt được những gì tôi yêu cầu? Hay là nó quay trở lại bản vẽ? – GenericTypeTea
@GenericTypeTea, Tuple có phải là tùy chọn có thể chấp nhận cho bạn không? –