Сравнение двойников в Java дает странные результаты

Проблема может быть решена с помощью combined expressions проекта LINQKit .

Вот как это сделать:

  1. Добавьте LinqKit для вашего проекта (например, через диспетчер пакетов NuGet).
  2. Добавьте следующую строку поверх вашего .cs-файла, чтобы сделать доступными методы расширения LINQKit
    using LinqKit; // for System.Linq.Expressions.Expression<>.Invoke()
    
  3. Определить выражение как статическое поле
    public static System.Linq.Expressions.Expression<
      System.Func<%type of ra% ra, %status type%>>
        GetStatusExpression = ra != null ? ... : ...;
    
  4. Вызвать выражение в запросе (обязательно добавить .AsExpandable () в первую таблицу, как описано в LINQKit docs)
    var lQuery = 
      from m in %first table%.AsExpandable() ...
      join a in ... into ta
      from ra in ta.DefaultIfEmpty()
      select 
        new {
          ...
          Status = GetStatusExpression.Invoke(ra),
          ...
        };
    

Если вы хотите использовать выражение в «нормальном» коде, вам нужно сначала скомпилировать его, как

 public static System.Func<%type of ra% ra, %status type%>
    GetStatusExpressionCompiled = GetStatusExpression.Compile();

 ...

 if (GetStatusExpressionCompiled(ra) == ...)
 {
   ...

Большая благодарность за то, что он указал мне в правильном направлении с его комментарием.

13
задан Simeon 11 March 2011 в 01:52
поделиться