我对LINQ很陌生,而且我很难从我的"可用性"中限制值的数量(字符串在" yyyy-mm"格式中)。基于查询(" LINQ_Query")在Lightswitch屏幕上显示的实体。这个想法只是展示"可用性"这是最近的 - 例如int.Parse(av.Availability.Substring(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
我用于PreprocessQuery的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.
有解决方法吗?我正在考虑执行一个单独的&#34; IDataServiceQueryable&#34;查询然后将Preprocess IQueryable查询指向&#34; IDataServiceQueryable&#34;的结果。一。这个或其他类型的查询是否有可能与int.Parse或DataTime.Parse / ParseExact一起使用?
提前致谢!
P.S。有关我的设置的更多详细信息:我正在测试Web Lightswitch 2011应用程序,该应用程序作为IIS服务器托管在我的PC上。数据库也存放在我的PC上的SQL Server 2008 Express x64 SP3上,这引出了一个问题 - 由于LINQ to Entities不支持我需要的功能,我可以在可用性上创建LINQ to SQL查询表
答案 0 :(得分:1)
尝试将它们拆分并移除演员
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个查询。