2011-11-14 34 views
6

Tôi khá mới đối với LINQ. Tôi có một cái gì đó như thế này:LINQ chỉ gọi hàm một lần trong một câu lệnh

dict = fullGatewayResponse. 
Split(',').ToDictionary(key => key.Split('=')[0], value => value.Split('=')[1]) 

Điều này làm việc tốt nhưng vì lý do rõ ràng tôi không muốn phương thức split() được gọi hai lần. Tôi có thể làm như thế nào?

Cảm ơn tất cả các câu trả lời của bạn :), nhưng tôi chỉ có thể chọn một câu trả lời.

+0

Bạn có thể cho chúng ta thấy cấu trúc của fullGatewayResponse chuỗi? – Tudor

Trả lời

12

Bạn có thể chuyển đổi từng hạng mục để một mảng trước ToDictionary bằng cách sử dụng Select:

dict = fullGatewayResponse.Split(',') 
          .Select(item => item.Split('=')) 
          .ToDictionary(keySelector:  parts => parts[0], 
             elementSelector: parts => parts[1]); 
+0

+1, nhưng hãy dừng đọc suy nghĩ của tôi :) – leppie

8
dict = (from item in fullGatetayResponse.Split(',') 
     let pair = item.Split('=') 
     select pair).ToDictionary(x => x[0], x => x[1]); 

hoặc, nếu bạn muốn giữ sự tồn tại của mảng ẩn:

dict = (from item in fullGatetayResponse.Split(',') 
     let pair = item.Split('=') 
     select new{Key=pair[0],Value=pair[1]).ToDictionary(x=>x.Key,x=>x.Value); 
+1

một trong số ít các điểm mà tôi thích cú pháp truy vấn – sehe

4

Hãy thử điều này:

dict = fullGatewayResponse.Split(',') 
     .Select(y => y.Split('=')) 
     .ToDictionary(y => y[0], x => x[1]) 
+0

Vui lòng xóa. Câu trả lời trùng lặp chính xác. – leppie

+2

eh ... Tại sao một người nào đó bỏ phiếu? Vui lòng cung cấp lý do khi bỏ phiếu xuống. Có gì sai với câu trả lời không? –

+0

Tôi đã bỏ phiếu và hủy bỏ phiếu bầu. Bình luận đầu tiên của tôi vẫn tiếp tục. Câu trả lời trùng lặp chính xác. – leppie

0

này sẽ làm việc nhưng tôi không nghĩ rằng có bất kỳ điểm nào trong tiết kiệm một hoạt động chia

var dict = fullGatewayResponse.Split(',') 
       .Select(i=>i.Split('=')) 
       .ToDictionary(key=>key[0],value=>value[1]); 
+0

Xin lỗi, cho đến khi tôi gõ xong, nhiều người đã trả lời như vậy. – Protean

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