4

現在..私のコードは次のようになります。

PhoneNumber = x.PhoneNumbers.FirstOrDefault() != null ? x.PhoneNumbers.FirstOrDefault().PhoneNumber : string.Empty,

PhoneNumbers はICollection<PhoneNumber>

これも にある.Select()ため、外部で変数を実際に作成することはできません。

Resharper はx.PhoneNumbers.FirstOrDefault()、null になる可能性があると不平を言っています。正直なところ、FirstOrDefault を 2 回実行しなければならないという考えは信じられません。

他のアイデアがあれば、似たようなことができる別の Lambda メソッドがあると思います。

4

3 に答える 3

12
PhoneNumber = x.PhoneNumbers.Select(pn => pn.PhoneNumber).FirstOrDefault() ?? "",
于 2013-06-20T16:45:44.687 に答える
8

Markusのような最初のオプション:

PhoneNumber = x.PhoneNumbers.Select(x => x.PhoneNumber)
                            .FirstOrDefault() ?? "";

別の方法:

PhoneNumber = x.PhoneNumbers.Select(x => x.PhoneNumber)
                            .DefaultIfEmpty("")
                            .First();

または、これを頻繁に行っていることに気付いた場合は、独自のメソッドを記述して 2 つを組み合わせることができます。

public static TElement ProjectedFirstOrDefault<TSource, TElement>
    (this IEnumerable<TSource> source,
     Func<TSource, TElement> selector,
     TElement defaultValue) where TElement : class
{
    var firstElement = source.FirstOrDefault();
    return firstElement == null ? defaultValue : selector(firstElement);
}

それで:

PhoneNumber = x.PhoneNumbers.ProjectedFirstOrDefault(x => x.PhoneNumber, "");
于 2013-06-20T16:45:50.600 に答える
0
var result = new List<Product>();

result = result.Where(o => o.Name == (string.IsNullOrEmpty(_nameParameter) ? o.Name : _nameParameter)).ToList();
于 2014-03-23T17:22:22.133 に答える