Lightswitch - C#LINQ预处理查询

时间:2015-01-06 10:23:40

标签: c# linq visual-studio-lightswitch

我对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查询表

1 个答案:

答案 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个查询。