मुझे LINQ में IsNull की समस्या है:

db.WarehouseInputsDetails
    .Select(p => new WarehouseInputDetailsViewModel
    {
        Id = p.Id
        RemainingQuantity = p.Quantity - p.LoadingsDetails.Sum(n => n.Quantity)
    }).AsQueryable();

p.LoadingsDetails.Sum(n => n.Quantity) संभावना NULL। मैं इस तरह परिणाम प्राप्त करना चाहता हूं:

select Id, IsNull(Sum(Quantity),0) as Quantity from LoadingsDetails

मैंने कुछ ऐसा करने की कोशिश की है:

db.WarehouseInputsDetails
    .Select(p => new WarehouseInputDetailsViewModel
    {
        Id = p.Id
        RemainingQuantity = p.LoadingDetails.First() == null ? p.Quantity : p.Quantity - p.LoadingsDetails.Sum(n => n.Quantity)
    }).AsQueryable();

यह त्रुटि लौटाता है:

System.NotSupportedException: विधि 'प्रथम' का उपयोग केवल अंतिम क्वेरी ऑपरेशन के रूप में किया जा सकता है। इसके बजाय इस उदाहरण में 'FirstOrDefault' विधि का उपयोग करने पर विचार करें।

मैंने कुछ इस तरह की कोशिश की है:

db.WarehouseInputsDetails
    .Select(p => new WarehouseInputDetailsViewModel
    {
        Id = p.Id
        RemainingQuantity = (p.LoadingsDetails.Sum(n => n.Quantity) == DBNull.Value) ? p.Quantity : p.Quantity - p.LoadingsDetails.Sum(n => n.Quantity)
    }).AsQueryable();

या

db.WarehouseInputsDetails
    .Select(p => new WarehouseInputDetailsViewModel
    {
        Id = p.Id
        RemainingQuantity = p.LoadingsDetails.First().Quantity == DBNull.Value ? p.Quantity : p.Quantity - p.LoadingsDetails.Sum(n => n.Quantity)
    }).AsQueryable();

वापसी त्रुटियाँ:

ऑपरेटर '==' को 'दशमलव' और 'DBNull' प्रकार के ऑपरेंड पर लागू नहीं किया जा सकता

enter image description here

0
Jun Rikson 30 पद 2018, 07:29

1 उत्तर

सबसे बढ़िया उत्तर

आप यहां Any() का उपयोग कर सकते हैं जो जांच करेगा कि क्या LoadingDetails के लिए कोई पंक्ति है, यदि हां तो LoadingDetails के लिए Quantity का योग करें:

RemainingQuantity = p.LoadingDetails.Any()  ? 
                p.Quantity - p.LoadingsDetails.Sum(n => n.Quantity) : 
                p.Quantity 
2
Ehsan Sajjad 30 पद 2018, 07:57