2009-11-21 34 views
29

Nói rằng tôi có một thực thể trông giống như ví dụ đơn giản này:Sử dụng LINQ để cập nhật thưởng Khách sạn trong một danh sách các thực thể

MyEntity 
{ 
    int property1; 
    int property2; 
    int property3; 
} 

Bây giờ giả sử tôi có một danh sách IEnumerable các entites. Có một truy vấn LINQ tôi có thể thực hiện mà sẽ thiết lập giá trị của property1 đến 100 cho mỗi thực thể trong danh sách? Tôi biết tôi có thể làm điều này thông qua một foreach, nhưng đã tự hỏi nếu LINQ có thể làm điều này thanh lịch hơn.

Trả lời

54

Như thế này:

var result = GetMyIEnumerable() 
       .ToList(); 
result.ForEach(x => x.property1 = 100); 
+0

hoàn toàn tuyệt vời! rất tinh tế nhưng mạnh mẽ –

4

Nếu bạn có 100 thuộc tính có thể sự phản chiếu sẽ thanh lịch nhất. LINQ cho truy vấn không cập nhật.

4

Đến thời điểm Darin của, LINQ được xây dựng cho các truy vấn. Tôi đã nhận được vào suy nghĩ khi làm việc với LINQ rằng các đối tượng được truy vấn nên được coi là không thay đổi. Tuy nhiên, trình điều khiển Chọn cũng rất tuyệt vời cho việc chuyển đổi.

Vì vậy, bạn có thể giải quyết vấn đề của bạn bằng cách chuyển đổi từ một tập khác như sau:

var result = myEntityCollection.Select(e => { 
    var ret = e; 
    e.property1 = 100; 
    return e; }); 

Các mặt hàng trong bộ sưu tập ban đầu là bị ảnh hưởng, nhưng các mục trong kết quả bây giờ sẽ đều có property1 thiết lập để 100

1

Dưới đây là hai giải pháp mà tôi đã tìm thấy có hiệu quả đối với tôi.

result = result.Where(x => (x.property1 = 100) == 100).ToList(); 

hoặc

result = result.Select(c => { c.property1 = 100; return c; }).ToList(); 
Các vấn đề liên quan