2011-08-31 44 views
13

Cách tốt nhất để làm điều này là nơi PROPNAME có thể là bất kỳ tài sản nào thuộc loại T? Xây dựng nó với sự phản ánh, hoặc là có một cách LINQ tốt để làm điều này?Thuộc tính danh sách LINQ cho mảng?

T[] vals = people.Select(x => x.PROPNAME).ToArray<T>(); 

này là tốt nhất mà tôi đã có cho đến nay:

public T[] ConvertListCol<TFrom,T>(IEnumerable<TFrom> list, string col) 
    { 
     var typ = typeof (TFrom); 
     var props = typ.GetProperties(); 
     var prop = (from p in props where p.Name == col select p).FirstOrDefault(); 
     var ret = from o in list select prop.GetValue(o, null); 
     return ret.ToArray<T>(); 
    } 

Got một lỗi trong sự trở lại ... nhưng nhận được gần hơn. Không sao, nhưng hơi lộn xộn hơn tôi mong đợi.

+0

Bạn sau khi một mảng tên thuộc tính của 'người'? –

+0

Bạn đang cố gắng tạo một đoạn mã có thể tái sử dụng, nơi bạn có thể chỉ định bất kỳ thuộc tính nào và lấy lại tập hợp các biểu diễn chuỗi? – Tejs

+0

tình huống là có một đối tượng poco lớn của nhiều thuộc tính và API muốn xem từng cột một lần thay vì một hàng tại một thời điểm. – sgtz

Trả lời

23

Sử dụng một loại var không rõ ràng, nó sẽ tự động tạo ra các kiểu cho bạn

var names = people.Select(x => x.PROPNAME).ToArray(); 
+0

Cảm ơn bạn rất nhiều JLevett !!! –

7

Các loại sẽ được suy ra nếu bạn sử dụng var keyword:

var names = people.Select(x => x.PROPNAME).ToArray(); 
+0

tốt! tên sẽ là một mảng của bất kỳ loại x.PROPNAME là –

+0

không có cách năng động để đổi tên một PROPNAME dựa trên một chuỗi. Xem thông tin mới "prop.GetValue (" mà tôi đặt ở đó trong một bản chỉnh sửa gần đây. Đó là một câu trả lời, tuy nhiên, nó không thực sự hiệu quả. – sgtz

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