2

わかりました、テキストに基づいてこのようなものになる可能性があるが、完全ではないという多くの質問を見てきました。私はこのようなものを持っていると言う

(from r in reports
                      join u in SECSqlClient.DataContext.GetTable<UserEntity>()
                      on r.StateUpdateReportUserID equals u.lngUserID
                      select r).

レポートに多数の reportDTO クラスがあり、その DTO のリストから選択したいが、同時に 1 つのプロパティを userEntity のプロパティに設定する場合、どうすればよいでしょうか? 基本的に、レポートの他のすべてのフィールドを維持したいのですが、ユーザー テーブルからユーザー名を設定します。(レポートのリストを取得する 1 つの大きなクエリでこれが行われないのには理由があります)

私が探しているのは、 Select r).Something(SOME LAMBDA TO SET ONE FIELD TO userEntity property) のようなものです。

4

1 に答える 1

3

これを行う汚い方法があります。

var repQuery = from r in reports ... select new { r, u };
var reps = repQuery.Select(x => { x.r.Property1 = x.u.Property1; return x.r; };

ただし、関数型プログラミング (Linq は間違いなくそうです) に関しては、関数の副作用を防ぐために、その原則に従うのが好きです。副作用は、関数本体 (この場合はプロパティ値) の外側の状態の変化です。

一方、これは有効な要件であるためForEach、クエリをリスト ( ToList()) に変換した後にメソッドを使用します。副作用が出ることForeach予想されます。または、同じことを行う明確な名前の拡張メソッドを on IEnumerable<T>(eg DoForAll) に記述しますが、遅延された方法で行います。IEnumerable に ForEach 拡張メソッドがない理由を参照してください。.

于 2013-08-06T14:46:42.953 に答える