1

ユーザーを返すこの単純なメソッドがあります。

User usr = ReliableExecution.RetryWithExpression<User, User>(u => u.FirstOrDefault(x => x.UserEmail == userEmail));

同様のメソッドを作成する必要がありますが、リストを返す必要があります

List<Asset> lst = ReliableExecution.RetryWithExpression<Asset, List<Asset>>(u => u.SelectMany(x => x.EventId == eventId));

私の問題は、コンパイルされない[SelectMany(x => x.EventId == eventId)]部分にあり、LINQを使用して複数の結果を取得する方法を正確に理解できません。例として「SelectMany」を指定しましたが、これは正しいと思われるものであれば何でもかまいません。

これは、参照用のRetryWithExpressionの署名です。

   public static TValue RetryWithExpression<T, TValue>(Func<ObjectSet<T>, TValue> func, Int32 retryInfiniteLoopGuard = 0)
         where T : class
4

2 に答える 2

1

あなたの表現は次のように書き直されるべきだと思います:

List<Asset> lst = ReliableExecution
    .RetryWithExpression<Asset, List<Asset>>(
        u => u.Where(x => x.EventId == eventId).ToList()
    );

簡単にSelectMany言うと、各単一アイテムAからアイテムBのリストを抽出するファンクターを使用して、「アイテムAのリストのリスト」を「アイテムBのリスト」にフラット化します。これはあなたがやりたいことではありません。

于 2012-04-27T02:04:19.977 に答える
1

あなたが望むようです:

List<Asset> lst = ReliableExecution.RetryWithExpression<Asset, List<Asset>>
                  (u => u.SelectMany(x => x.Where(y => y.EventId == eventId)));

SelectManyFunc渡されたものがを返すことを期待し、IEnumerableそれが平坦化されます。のリストを通過してから、リストから直接Asset選択しようとしていました。EventId本当に必要だったのは、リスト内のすべてのアセットを一致するもので選択することでした。EventIdしたがって、追加のWhere句があります。

于 2012-04-27T02:04:25.197 に答える