1

次のラムダ式があります:

string queryToken = queryTokens.Last();
var result = from locationAddress in locations
             let tokens = GetLetterTokens(locationAddress.Name)
             let distance = (from token in tokens
                             where token.Contains(queryToken, StringComparison.OrdinalIgnoreCase)
                             select token.Length - queryToken.Length).Min()
             orderby distance
             select new
                        {
                            LocationAddress = locationAddress,
                            LocationDistance = distance,
                        };

それが何のために書かれているかは関係ありません。カウントするときにdistance、がtokens含まれていないqueryTokenため、.Min()返すことができなかった場合があります。これらのケースをスキップする方法は?resultそれらを変数に追加したくありません。

4

1 に答える 1

2

あなたが望むように聞こえます:

let tokens = ...
where tokens.Any(token.Contains(queryToken, StringComparison.OrdinalIgnoreCase))
let distance = ...

または、トークンを選択するときにフィルタリングして、存在するかどうかを確認します。

var result = from locationAddress in locations
             let tokens = GetLetterTokens(locationAddress.Name)
                              .Where(token => token.Contains(queryToken, StringComparison.OrdinalIgnoreCase)
             where tokens.Any()
             let distance = tokens.Min(token => token.Length - queryToken.Length)
于 2012-08-28T14:48:56.527 に答える