2017-10-14 18 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クエリでのみ使用できます。 2つのオプションがあります 1. ToList()またはToArray()を実行し、次に.FirstOrDefault(.....)を実行してFire dbクエリーを実行します これは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; 
    } 

がサポートされていません。それはとても美しく動作します。ありがとうございました。

関連する問題