Lightswitch - C# LINQ 预处理查询
本文关键字:预处理 查询 LINQ Lightswitch | 更新日期: 2023-09-27 18:36:18
我是 LINQ 的新手,在限制我的"可用性"实体中的值("yyyy-mm"格式的字符串)的数量时遇到问题,这些值显示在 Lightswitch 屏幕上,基于查询 ("LINQ_Query")。这个想法是只显示最近的"可用性" - 例如int。Parse(av.可用性.子字符串(0,4))> 2013
我这样做的原因是"可用性"实体包含字符串,并非所有字符串都是"yyyy-MM"格式 - 还有"可用"、"延迟"、"2014"等条目。我只想过滤长度为 7 的那些,理想情况下比 2013-12 年更近,而不是将来(当前日期>可用性)。
在SQL中,我使用以下代码实现了这一目标:
SELECT Availability FROM Availabilities where LEN(Availability)=7 and LEFT(Availability,4) > 2013 and availability<=CONVERT(varchar(7),GETDATE(),126) order by Availability desc
我用于预处理查询的 C# 代码如下,它的编译没有错误:
partial void LINQ_Query_PreprocessQuery(ref IQueryable<Availabilities> query)
{
query = from av in query
where av.Availability.Length==7 && int.Parse(av.Availability.Substring(0,4)) > 2013
select av;
}
但是,当我部署和测试时,屏幕上有可怕的红色X。我启用了跟踪,但看到错误是:
[Microsoft.LightSwitch.DataService][Application:Error][LightSwitchApplication.ApplicationData:LINQ_Query] An exception has occurred: Microsoft.LightSwitch.DataServiceOperationException: LINQ to Entities does not recognize the method 'Int32 Parse(System.String)' method, and this method cannot be translated into a store expression.
有解决方法吗?我正在考虑执行一个单独的"IDataServiceQueryable"查询,然后将预处理IQueryable查询指向"IDataServiceQueryable"查询的结果。这种或其他类型的查询是否有可能与 int 一起使用。Parse or DataTime.Parse/ParseExact?
提前感谢!
附言有关我的设置的更多详细信息:我正在测试一个 Web Lightswitch 2011 应用程序,该应用程序作为 IIS 服务器托管在我的电脑上。数据库托管在我的 PC 上的 SQL Server 2008 Express x64 SP3 上,这让我想到了另一个问题 - 由于 LINQ to Entities 不支持我需要的功能,我可以在可用性表上创建 LINQ to SQL 查询吗?
尝试拆分它们并删除演员表
partial void LINQ_Query_PreprocessQuery(ref IQueryable<Availabilities> query)
{
query = query.Where(x=>x.Availability.Length==7);
query = query.Where(x=>x.Availability.Substring(0,4) == "2013";
}
Linq 中的 Ctype 或 Parse 可能会有问题(如果一个失败,那么所有的人都会失败)
如果有效,请再次联接 2 个查询。