式ツリーラムダには、null 伝播演算子を含めることはできません。質問する

式ツリーラムダには、null 伝播演算子を含めることはできません。質問する

次のコードの行price = co?.price ?? 0,では上記のエラーが発生しますが、削除すると?正常co.?に動作します。

私は従おうとしていたこのMSDNの例?オンラインで使用されている場所では、いつwithを使用するか、いつ使用しないかselect new { person.FirstName, PetName = subpet?.Name ?? String.Empty };を理解する必要があるようです。???

エラー:

式ツリーラムダにはヌル伝播演算子を含めることはできません

public class CustomerOrdersModelView
{
    public string CustomerID { get; set; }
    public int FY { get; set; }
    public float? price { get; set; }
    ....
    ....
}
public async Task<IActionResult> ProductAnnualReport(string rpt)
{
    var qry = from c in _context.Customers
              join ord in _context.Orders
                on c.CustomerID equals ord.CustomerID into co
              from m in co.DefaultIfEmpty()
              select new CustomerOrdersModelView
              {
                  CustomerID = c.CustomerID,
                  FY = c.FY,
                  price = co?.price ?? 0,
                  ....
                  ....
              };
    ....
    ....
 }

ベストアンサー1

あなたが引用した例では、LINQ to Objectsを使用しており、クエリ内の暗黙のラムダ式は次のように変換されます。代表者...一方、EFや類似のクエリを使用する場合、IQueryable<T>ラムダ式は次のように変換されます。表現ツリー式ツリーは null 条件演算子 (またはタプル) をサポートしていません。

昔ながらのやり方でやってみましょう:

price = co == null ? 0 : (co.price ?? 0)

(式ツリーでは null 結合演算子は問題ないと思います。)

おすすめ記事