方法“{0}”没有支持的SQL转换

时间:2017-10-14 21:15:31

标签: c# linq-to-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("\\*", ".*") + "$";
}

2 个答案:

答案 0 :(得分:0)

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

  1. 将过滤功能转换为简单的sql支持功能。据我所知,实体框架中不支持Regex

答案 1 :(得分: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;
    }

它的工作非常精美。谢谢。