2008-11-06 32 views
47

phép nói rằng tôi có một mảng như thế này:Làm thế nào để bạn thêm một lĩnh vực chỉ số để LINQ quả

string [] Filelist = ... 

Tôi muốn tạo ra một kết quả LINQ nơi mỗi mục có vị trí của nó trong mảng như thế này:

var list = from f in Filelist 
    select new { Index = (something), Filename = f}; 

Index là 0 cho mục 1, 1 cho 2 vv

tôi nên sử dụng cho các biểu thức Index =?

Trả lời

113

Không sử dụng biểu thức truy vấn. Sử dụng the overload of Select which passes you an index:

var list = FileList.Select((file, index) => new { Index=index, Filename=file }); 
+0

Làm thế nào để bạn làm điều này trong cú pháp sql? – toddmo

+0

@toddmo: Bằng "trong cú pháp sql", bạn có nghĩa là "sử dụng các biểu thức truy vấn LINQ" không? Nếu có, bạn không thể. Nếu bạn có nghĩa là "trong SQL chính nó" thì tôi không biết - Tôi nghi ngờ có những cách không di động để làm điều đó. –

+0

Tôi đã tìm ra, cảm ơn. Tôi có nghĩa này: '(từ GHCOPPADriverType lái xe trong policy.Drivers từ GHCOPPADriverHistoryType driverHistory trong driver.Rating_DrivingHistory chọn (lái xe: lái xe, lịch sử: driverHistory)) .Chọn ((t, i) => DriverHistoryModel mới (t .history) {DriverId = t.driver.Id, Trình tự = i + 1}); Vì vậy, tôi đã phải thoát khỏi các biểu thức truy vấn để sử dụng quá tải 'Select'. – toddmo

0
string[] values = { "a", "b", "c" }; 
int i = 0; 
var t = (from v in values 
select new { Index = i++, Value = v}).ToList(); 
+2

Tại sao lại gặp tất cả sự cố đó thay vì sử dụng phiên bản do khung công tác cung cấp? –

+13

Xin đừng bao giờ làm đột biến trong các truy vấn LINQ .... – yfeldblum

+1

Tại sao không !? Nó hoạt động. Bạn có toàn quyền kiểm soát theo cách này. Tôi có lẽ sẽ không tự mình làm điều này, nhưng đó là câu hỏi đã được hỏi. – GeekyMonkey

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