【发布时间】:2014-02-19 00:17:40
【问题描述】:
我的项目正在使用 MVC 4 C# LINQ to SQL。
由于某种原因,用于获取我的一个属性的数据的方法给出了“没有支持的 SQL 转换”错误。获取此数据的方法与同一查询中的另一个属性的方法几乎相同,除了一个有效的方法抓取一个字符串,其中一个没有小数点。
确切的错误代码:
Method 'System.Decimal GetModelDifficulty(System.String)' has no supported translation to SQL.
我尝试了以下代码的多种变体,但总是遇到与上面相同的错误:
public List<ProductionSchedule> GetBaseProductionSchedule(DateTime selectedDate)
{
var spaList = (from x in db.WO010032s
join y in db.MOP1042s on x.MANUFACTUREORDER_I equals y.MANUFACTUREORDER_I into x_y
where x.STRTDATE == selectedDate && (x.MANUFACTUREORDERST_I == 2 || x.MANUFACTUREORDERST_I == 3)
from y in x_y.DefaultIfEmpty()
select new ProductionSchedule()
{
MO = x.MANUFACTUREORDER_I,
BOMNAME = x.BOMNAME_I,
SpaModel = x.ITEMNMBR,
MoldType = GetMoldType(x.ITEMNMBR.Trim()),
SerialNumber = y.SERLNMBR,
Difficulty = GetModelDifficulty(x.ITEMNMBR.Trim())
}).OrderByDescending(x => x.Difficulty).ToList();
return spaList;
}
public string GetMoldType(string model)
{
return db.SkuModelDatas.Where(x => x.Value == model).Select(x => x.MoldType).FirstOrDefault();
}
public decimal GetModelDifficulty(string model)
{
return (decimal)db.SkuModelDatas.Where(x => x.Value == model).Select(x => x.Difficulty).FirstOrDefault();
}
【问题讨论】:
-
奇怪 - 我相信(
GetModelDifficulty和GetMoldType)都应该给你同样的错误,因为方法调用不能被翻译成 SQL... -
嗯,奇怪,我相信我之前已经使用过很多次了。此外,我还测试了注释 GetModelDifficulty 方法并将其设置为 0,然后即使 GetMoldType 方法保持不变,查询也会毫无问题地执行。
-
SkuMOdelData.Difficulty的类型是什么?你为什么要把它转换成十进制? -
SkuModelData.Difficulty 的类型是十进制吗?但是模型对象需要十进制,所以我必须将它从它的可为空状态转换。我还尝试在 GetModelDifficulty 方法中查询该值,如果为 null,则返回 0M,如果不是,则返回该值,但额外的逻辑似乎没有任何区别。
-
是 SkuModelDatas.Value 是 dbml 中的 system.string 类型。
标签: c# linq linq-to-sql