LINQ to entities 无法识别方法 'System.DecimalToDecimal

LINQ to entities does not recognize the method 'System.DecimalToDecimal

一个名为 "Player" 的 table 被读取为一个对象,它有 'BattingAverage' 列。我想允许用户通过用户输入的最小平均值和最大平均值范围搜索特定玩家。 我写成 Lamda(我也尝试在 'player.BattingAverage' 之后添加 AsEnumerable()

dbcontext.Players.Where(player => player.BattingAverage >= Convert.ToDecimal(txtMin.Text) ||
        player.BattingAverage <= Convert.ToDecimal(txtMax.Text))
        .OrderBy(player => player.PlayerID).Load();

和正常查询

decimal test;
test = Convert.ToDecimal(txtMin.Text) + 4.5m;
txtMax.Text = test.ToString();

var query = from player in dbcontext.Players
            where player.BattingAverage >= Convert.ToDecimal(txtMin.Text) ||
                            player.BattingAverage <= Convert.ToDecimal(txtMax.Text)
            select player;

playerBindingSource.DataSource = query.ToList();
playerBindingSource.MoveFirst();

但我都收到一个错误,上面写着:

LINQ to Entities does not recognize the method 'System.DecimalToDecimal(System.Object)' method and this method cannot be translated into a store expression.

原table的BattingAverage列值为dec​​imal(3,3)

我也试过了

decimal test;
test = Convert.ToDecimal(txtMin.Text) + 4.5m;
txtMax.Text = test.ToString();

它起作用了,所以我认为问题出在 LINQ 中。

在查询之外进行转换:

var min=Convert.ToDecimal(txtMin.Text);
var max =Convert.ToDecimal(txtMax.Text);

 var query = from player in dbcontext.Players
             where player.BattingAverage >= min && player.BattingAverage <= max
             select player;

您的 Linq to Entities 查询将被转换为 sql,但 linq 提供程序无法将这些方法调用转换为相应的存储函数。您可以在 link

中找到支持的方法列表