まず、他の既存のものと同様の質問を投稿しても構いませんが、C#を初めて使用してLINQを把握し始めました。 2つのテーブルにまたがって1つの行のフィールドを取得するビジネスロジックがあります。そのような行が存在しない場合、デフォルトでは空のStringにする必要があります。 LINQ外 これは簡単だろう:Expression-Treeラムダのヌルチェックへの適切な方法
var res = SomeClass.foo?.bar ?? "";
しかし、LINQでの演算子?.
と??
がサポートされていないので、私はこれに頼っ:
var projectTask = repository.Set<tblProject>().Where(p => includeInactive ||
(p.tblOrderStatus.OrderByDescending(s => s.Date).FirstOrDefault().StatusID != StatusIds.Deducted &&
p.tblOrderStatus.OrderByDescending(s => s.Date).FirstOrDefault().StatusID != StatusIds.Deduc_RestDecays &&
p.tblOrderStatus.OrderByDescending(s => s.Date).FirstOrDefault().StatusID != StatusIds.Cancelled))
.Select(p => new {
p.ID,
p.CustomerID,
p.CenterID,
p.FrameworkID,
p.DeductionmodeID,
p.Code,
p.Descriptioln,
p.StartDate,
p.EndDate,
Referencetext = p.tblOrderHistories.Where(m => m.OrderReferencetypeID == 1).OrderByDescending(m => m.Date).FirstOrDefault() != null ?
p.tblOrderHistories.Where(m => m.OrderReferencetypeID == 1).OrderByDescending(m => m.Date).FirstOrDefault().Referencetext : ""
})
.ToListAsync();
「にISNましたこの場合のパフォーマンスの低下は、それほどエレガントではありません。
私はExpression
でLINQ式を構築できることを理解していますが、私のケースの例はあまりありません。
ありがとうございます。
ありがとう!しかし '.FirstOrDefault()'はnullを返すでしょうか? – drilow
null可能な型の場合、絶対に( 'null'は' XyzOrDefault'の中の 'Default'の意味です) –
それは意味があります。 – drilow