2017-10-14 115 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; 
    } 

它的工作這麼漂亮的支持正則表達式。謝謝。