我的C#应用程序有问题.我试图从SQL Server数据库中获取一个项目,在数据库中,我可以使用以下查询:
SELECT *
FROM [table]
WHERE [field] IS NOT NULL
AND [field] != ''
AND CONCAT(REPLICATE('0', 10 - LEN([field])), [field]) = 'literal'
这工作得很好,并返回表上所需的行,所以我知道一个事实,即项目存在.
然后,我try 从我的C#后端访问相同的数据,我通过LINQ表达式这样做,如下所示:
var literal = 'xxxxx'
desired = dbContext.dbSet.Where(x => x.field != null && x.field != "" && (
string.Concat(SqlFunctions.Replicate("0", 10 - x.CodigoProductoCia.Length), x.CodigoProductoCia) == literal
)
上一段代码生成以下异常消息:
LINQ表达式
DbSet<Entity>().Where(p => p.field != null && p.field != "" && SqlFunctions.Replicate(target: "0", count: (int?)(10 - p.CodigoProductoCia.Length)) + p.CodigoProductoCia == "")
个不能翻译.其他信息:方法"System. Data. Entity. SQLServer. SQLFunctions. Replication"的转换失败.如果此方法可以映射到您的自定义函数,请参见https://go.microsoft.com/fwlink/?linkid=2132413以获取更多信息.以可翻译的形式重写查询,或通过插入对'AsEnumerable'、'AsAsAsyncEnumerable'、'ToList'或'ToListAsync'的调用显式切换到客户端判断.https://go.microsoft.com/fwlink/?linkid=2101038了解更多信息"
我的理解是LINQ不能将查询转换为SQL,这是公平的,但老实说,我只使用在LINQ中工作的方法,string.Concat()
产生的结果和简单的+
相同.
事实上,错误是专门抱怨SqlFunctions#Replicate
,这是一个方法,特别是不可能在"LINQ to Entities"查询之外调用,这使得这个问题更加混乱.
有什么建议吗?