我有一个asp:EntityDataSource
<asp:EntityDataSource ID="EntityDataSource1" runat="server"
ConnectionString="name=MyEntities" DefaultContainerName="MyEntities"
EntitySetName="Student" Where="it.Age = 12 or it.Age = 13">
</asp:EntityDataSource>现在我需要展示更多的年龄。有办法写得这么短吗?
我的尝试:
<asp:EntityDataSource ID="EntityDataSource1" runat="server"
ConnectionString="name=MyEntities" DefaultContainerName="MyEntities"
EntitySetName="Student" Where="it.Age IN (11,12,13,14)">
</asp:EntityDataSource>但这会造成一个错误
set表达式的正确参数必须是CollectionType。
发布于 2017-02-17 10:03:50
在IN的Where属性上使用EntityDataSource子句的正确方法是在数组声明之类的所有值周围放置大括号块:
<asp:EntityDataSource ID="EntityDataSource1" runat="server"
ConnectionString="name=MyEntities" DefaultContainerName="MyEntities"
EntitySetName="Student" Where="it.Age IN {11,12,13,14}">
</asp:EntityDataSource>使用大括号的原因可能取决于ObjectQuery,它接收对给定上下文上的模型的类型化查询,该模型可能接受值数组。换句话说,In子句在LINQ格式上具有等效的以下内容:
int[] ages = new int[] {11, 12, 13, 14};
var query = MyEntities.Student.Where(it => it.Age.Contains(ages));生成的SQL命令将变成:
SELECT * FROM [MyEntities].[Student] WHERE Age IN (11,12,13,14)其他可能的原因是ASPX页面标记中的服务器控制语法遵循XSLT关于属性值模板的惯例,后者将大括号块解释为字符串值表达式,括号作为方法参数/表达式附件处理(参见XSL转换细节)。
类似问题:
其他参考资料:
创建IN查询
https://stackoverflow.com/questions/42132925
复制相似问题