2013-05-24 12 views

答えて

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

しかし、私は選択内のプラットフォームをロードしています。 – pencilCake

+0

@pencilCake - どういう意味なのか分かりません。あなたのテストはあなたが読み込んでいるプラットフォームに反しています。最初にロードせずにどのように状態をチェックするつもりですか? – Lee

1

あなたはこのような何かを行うことができます。

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

あなたがしたくない要素をフィルタリングするWhereを使用する必要があります。これは現在のコードでは不可能ですが、リファクタリングの余地は非常にあります。このようにそれを書き直し:

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

「他のコード」もプラットフォーム値を必要とする場合は、あなたが最初に匿名型に突出すべきである:あなたがこの中にブロック式を書いて避ける必要があり、一般的に

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 

可能な限りラムダの一種。ブロック式は、簡単に構成できない剛性のあるコードを作成します。

関連する問題