2017-10-14 21 views
0

Je faisais le mappage avec des caractères génériques. Je reçois cette erreur parce que la définition de la règle à rechercher provient uniquement d'une table.La méthode '{0}' n'a pas de traduction prise en charge vers SQL

Je ne sais pas exactement comment je fais ça ici, mais par conséquent j'ai une erreur et j'attends votre aide.

public class Ekstre 
{ 
    private readonly DataClasses1DataContext db = new DataClasses1DataContext(); 
    private readonly KdrGnyClassesDataContext kg = new KdrGnyClassesDataContext(); 

    public bool check { get; set; } 
    public int Id { get; set; } 
    public DateTime Tarih { get; set; } 
    public string Kodu { get; set; } 
    public string Açıklama { get; set; } 
    public decimal Tutar { get; set; } 
    public string bankaKod { get; set; } 
    private string kod = null; 

    public string muhKod { 
     get { return kod = kg.kuralTanimlari 
          .FirstOrDefault(a => Regex.IsMatch(Açıklama, WildCardToRegular(a.kural))).hesapKodu; 
      } 
     set { kod = value; } 
    } 

    private string hesap = null; 

    public string hesapAdi { 
     get { 
      hesap = !string.IsNullOrWhiteSpace(muhKod) ? db.MUHHESAP.First(p => p.MUHKOD == muhKod).MUHADI1 : null; 
      return hesap; 
     } 
     set => hesap = value; 
    } 

    public string kodTipi { get; set; } 
} 

public static string WildCardToRegular(string value) 
{ 
    return "^" + Regex.Escape(value).Replace("\\?", ".").Replace("\\*", ".*") + "$"; 
} 

Répondre

0

Vous pouvez uniquement utiliser les fonctions prises en charge sur les requêtes dbcontext sur IQuerable. Vous avez deux options 1. Feu db requête en faisant ToList() ou ToArray() et puis .FirstOrDefault (.....) Cela a un inconvénient qu'il va chercher tous les enregistrements de DB, puis appliquer votre fonction aux résultats.

  1. Convertissez votre fonction de filtrage en une simple fonction prise en charge de SQL. Pour autant que je sais Regex ne sont pas pris en charge dans le cadre de l'entité
+0

oui ce n'est pas le cas. comment puis-je faire des changements. – KdrGny

0
public string muhKod { 
     get 
     { 
      var firstOrDefault = kg.kuralTanimlari.ToList() 
       .FirstOrDefault(a => Regex.IsMatch(Açıklama, WildCardToRegular(a.kural))); 
      if (firstOrDefault != null) 
       kod = firstOrDefault.hesapKodu; 
      return kod; 
     } 
     set => kod = value; 
    } 

Il fonctionne si bien. Je vous remercie.