次のコードの行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 結合演算子は問題ないと思います。)