2017-02-21 14 views
-3

Теперь я понимаю, что когда x.transaction имеет значение null, он пропускает. Но как я могу установить значение в методе расширения .Where()? Как видите, первая строка имеет условие, если идентификатор не равен нулю, а затем установите значение равным нулю. Но как насчет расширения .Where() как установить значение, если значение x.TransactionPrice равно null? В третьей строке.Как установить значение нуля в расширении .Where(), если значение равно null

Только в этом примере коды:

var Rs12 = id != null 
       ? _context.DwPropertyDetails 
        .Where(x => x.LandId == id && x.TransactionPrice != null) 
        .OrderByDescending(x => x.TransactionPrice) 
        .AsEnumerable() 
        .Select(
         (x, index) => 
          new 
          { 
           TRANSACTION_PRICE = x.TransactionPrice ?? (long?)0, 
           ACTUAL_SIZE = x.ActualSize, 
           rank = index + 1 
          }) 
        .Where(x => x.rank == 1).Select(x => new 
        { 
         TRAN_S = x.TRANSACTION_PRICE ?? (long?)0 
        }) 
        .SelectMany(
         TranS => 
          _context.DwPropertyDetails.Where(
            x => x.LandId == id && x.TransactionPrice != null) 
           .OrderByDescending(
            x => 
             (x.TransactionPrice ?? 0)/
             (x.ActualSize == null || x.ActualSize == 0 ? 1 : x.ActualSize) ?? 1) 
           .AsEnumerable() 
           .Select(
            (x, index) => 
             new 
             { 
              PER_FT_S = 
              (x.TransactionPrice ?? 0)/
              (x.ActualSize == null || x.ActualSize == 0 ? 1 : x.ActualSize) ?? 1, 
              rank = index + 1 
             }) 
           .Where(x => x.rank == 1).Select(x => new 
           { 
            x.PER_FT_S 
           }), (TranS, PerFtS) => new 
           { 
            TranS.TRAN_S, 
            PerFtS.PER_FT_S 
           }) 
       : _context.DwPropertyDetails.Select(x => new 
       { 
        TRAN_S = (long?)0, 
        PER_FT_S = (long)0 
       }); 

ответ

0

расширения .Where() принимает предикат, так что вы можете использовать statement lambdas вместо expression lambdas и установите значения.

class A 
    { 

     public int Id { get; set; } 
     public string Name { get; set; } 
     public string Address { get; set; } 
     public string AddressPresent { get; set; } 
    } 

здесь является метод, который устанавливает значение в тех случаях, когда расширение

static void WhereDemo() 
     { 
      List<A> aList = new List<A>{ 

        new A{ Id=1,Name="Hi",Address="Toronto" }, 
        new A{ Id=2,Name="Him",Address="NY" }, 
        new A{ Id=3,Name="His" }, 
        new A{ Id=4,Name="quad",Address="MS" }, 
      }; 

      var queryOutput= aList.Where(x => { 
       if (x.Address != null) 
       { 
        x.AddressPresent = "Present"; 
        return true; // selects the element 
       } 
       else 
       { 
        x.AddressPresent = "Absent"; 
        return false; // does not select the element 
       } 

      }); 

      foreach (var element in aList) 
      { 

       Console.WriteLine("{0}\t{1}\t{2}\t{3}", element.Id, element.Name, element.Address, element.AddressPresent); 
      } 
      Console.WriteLine("-----------------------"); 
      foreach (var item in queryOutput) 
      { 
       Console.WriteLine("{0}\t{1}\t{2}\t{3}", item.Id, item.Name, item.Address, item.AddressPresent); 

      } 
     } 

Выход

1  Hi  Toronto 
2  Him  NY 
3  His 
4  quad MS 
----------------------- 
1  Hi  Toronto Present 
2  Him  NY  Present 
4  quad MS  Present 

Вы можете заметить, что это влияет только на результаты запроса, хотя и не оригинальные элементы списка ,

+0

спасибо. но не работает. –

+0

может дать несколько тестовых примеров? без тестовых примеров трудно понять, что вы хотите –

+0

как насчет? как проверить, является ли модель в представлении нулевым, установите значение для свойств. Как это сделать? –

 Смежные вопросы

  • Нет связанных вопросов^_^