方法“{0}”不支持转换为SQL
问题描述:
我正在使用通配符进行映射。我得到这个错误,因为要搜索的规则的定义只来自一个表格。方法“{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("\\*", ".*") + "$";
}
答
您只能在IQuerable的dbcontext查询上使用支持的函数。 您有两个选择 1.通过执行ToList()或ToArray()然后执行.FirstOrDefault(.....) 这有一个缺点,它会从db中获取所有记录,然后应用您的 函数结果。
- 将您的过滤函数转换为简单的sql支持函数。据我知道是不是在实体框架
答
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;
}
它的工作这么漂亮的支持正则表达式。谢谢。
是的,它没有。我怎样才能做出改变。 – KdrGny