4

次のような linq ステートメントがあります。

        var entities = from row in table.AsEnumerable()
                                    select new
                                    {
                                        ID = row.ID,
                                        X = GetObjectByProcessingID(row.ID)[0],
                                        Y = GetObjectByProcessingID(row.ID)[1],
                                        ....
                                    };

次のようなことは可能でしょうか:

        var entities = from row in table.AsEnumerable()
                                    select new
                                    {
                                        private var tmp = GetObjectByProcessingID(row.ID),
                                        ID = row.ID,
                                        X = tmp[0],
                                        Y = tmp[1],
                                        ....
                                    };

GetObjectByProcessingID を 2 回呼び出すのを避けるには?

私はあなたが次のようなことができることを知っています:

        var entities = from row in table.AsEnumerable()
                                    select new
                                    {
                                        ID = row.ID,
                                        XAndY = GetObjectByProcessingID(row.ID),
                                        ....
                                    };

ただし、この場合、配列全体が公開されます。また、メソッド側でのキャッシュ (GetObjectByProcessingID) や、ヘルパー メソッドを作成してそれを呼び出し、ID が同じ場合は最後の値を記憶するなどを実装できることも知っています。しかし、より良い方法はありますか?匿名型の作成中に一時変数を作成できますか?

4

1 に答える 1

11

let次のようにキーワードを使用します。

var entities = from row in table.AsEnumerable()
               let tmp = GetObjectByProcessingID(row.ID)
               select new {
                            ID = row.ID,
                            X = tmp[0],
                            Y = tmp[1],
                            ....
                           };

method syntax私がとても気に入っているものを試してみることもできます:

var entities = table.AsEnumerable()
                    .Select(row => {
                       var tmp = GetObjectByProcessingID(row.ID);
                       return new {
                                ID = row.ID,
                                X = tmp[0],
                                Y = tmp[1],
                                ....
                              };
                     });
于 2013-10-22T15:05:39.473 に答える