2013-05-24 21 views
8

là nó có thể bỏ qua lựa chọn bên trong .Chọn phương pháp trong LINQ giống như 'tiếp tục' trong fore ..each?Có thể hủy bỏ lựa chọn và 'Tiếp tục' trong câu lệnh .Select khi có điều kiện không?

var myFoos = allFoos.Select (foo =>                         { 

    var platform = LoadPlatform(foo); 
     if (platform == "BadPlatform") // TODO: should skip and continue 
     var owner = LoadOwner(foo); 
     // .... Som eother loads 
}); 
+2

một 'Where' trước' Select'? – I4V

Trả lời

2
var myFoos = from foo in allFoos 
      let platform = LoadPlatform(foo) 
      where platform != "BadPlatform" 
      select LoadOwner(foo); 
+0

Nhưng tôi đang tải nền tảng trong Chọn. – pencilCake

+0

@pencilCake - Tôi không chắc chắn ý của bạn là gì - thử nghiệm của bạn chống lại nền tảng bạn đang tải. Làm thế nào bạn sẽ kiểm tra tình trạng mà không cần tải nó trước? – Lee

1

Bạn có thể làm điều gì đó như thế này:

var myFoos = allFoos 
     .Select (foo => new {Platform = LoadPlatform(foo), Foo = foo}) 
     .Where(all => all.Platform != "BadPlatform") 
     .Select(all => { 
      var platform = all.Platform;//Not "BadPlatform" 
      var owner = LoadOwner(all.Foo); 
      // .... Som eother loads 
     }); 
2

Bạn nên sử dụng một Where để lọc ra các yếu tố bạn không muốn. Điều này là không thể với mã hiện tại của bạn, nhưng có rất nhiều chỗ để tái cấu trúc. Viết lại nó như thế này:

var myFoos = allFoos 
    .Where(foo => LoadPlatform(foo) != "BadPlatform") 
    .Select(LoadOwner) 
    // ...continue with your other code 

Nếu "mã khác" cũng cần những giá trị nền tảng thì bạn nên dự án vào một loại vô danh đầu tiên:

var myFoos = allFoos 
    .Select(foo => new { Platform = LoadPlatform(foo), Foo = foo }) 
    .Where(o => o.Platform != "BadPlatform") 
    .Select(o => new { Platform = o.Platform, Owner = LoadOwner(o.Foo), ... }) 
    // ...continue with your other code 

Nói chung bạn nên tránh biểu khối bằng văn bản này loại lambdas nếu có thể; biểu thức khối làm cho mã cứng nhắc không thể được tạo thành dễ dàng.

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