Как использовать func в Linq to Entity select? - PullRequest
0 голосов
/ 08 ноября 2019

Я хочу использовать подобное, как показано ниже, но выдает ошибку, если я не использую AsEnumerable. Почему я хочу это, потому что оно мне понадобится во многих местах.

Есть ли другой способ сделать это?

public static class EntityHelper
{
    public static Func<TABLE1, TABLE2, TABLE2, string> SelectTitle = (trn, acc, parentAcc) => trn.master_id != trn.parent_id ? parentAcc.name : acc.name;
}
 var query = from trn in context.TABLE1
      join acc in context.TABLE2 on trn.acc_id equals acc.id
      join parentAcc in context.TABLE2 on trn.parent_id equals parentAcc.id                            
      select new {name = EntityHelper.SelectTitle.Invoke(trn,acc,parentAcc)};

System.NotSupportedException: 'LINQ to Entities не распознает метод метода System.String Invoke (TABLE1, TABLE2, TABLE2), и этот метод нельзя преобразовать в выражение хранилища. '

1 Ответ

0 голосов
/ 12 ноября 2019

Я решил эту работу, используя LinqKit nuget. Я изменил свой код следующим образом.

public static class EntityHelper
{
     public static Expression<Func<TABLE1, TABLE2, TABLE2, string>> SelectTitle = (trn, acc, parentAcc) => trn.master_id != trn.parent_id ? parentAcc.name : acc.name;
}
 var query = from trn in context.TABLE1.AsExpandableEF()
      join acc in context.TABLE2 on trn.acc_id equals acc.id
      join parentAcc in context.TABLE2 on trn.parent_id equals parentAcc.id                            
      select new {name = EntityHelper.SelectTitle.Invoke(trn,acc,parentAcc)};

...