2017-10-14 114 views
0

我正在使用通配符进行映射。我得到这个错误,因为要搜索的规则的定义只来自一个表格。方法“{0}”不支持转换为SQL

我不知道我在这里做得怎么样,但结果我有一个错误,我期待你的帮助。

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("\\*", ".*") + "$"; 
} 

回答

0

您只能在IQuerable的dbcontext查询上使用支持的函数。 您有两个选择 1.通过执行ToList()或ToArray()然后执行.FirstOrDefault(.....) 这有一个缺点,它会从db中获取所有记录,然后应用您的 函数结果。

  1. 将您的过滤函数转换为简单的sql支持函数。据我知道是不是在实体框架
+0

是的,它没有。我怎样才能做出改变。 – 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; 
    } 

它的工作这么漂亮的支持正则表达式。谢谢。