EntityDataSource WHERE IN

时间:2017-02-09 09:33:28

标签: c# asp.net entity-framework

我有Promise.all([ DevicesModel.count().exec(), RoomsModel.count().exec() ]).then(function(counts) { console.log('Devices count %d', counts[0]); console.log('Rooms count %d', counts[1]); });

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>

但是会抛出错误

  

set表达式的右参数必须是CollectionType。

1 个答案:

答案 0 :(得分:2)

IN的{​​{1}}属性上使用Where子句的正确方法是将大括号块放在所有值的周围,如数组​​声明:

EntityDataSource

使用花括号背后的原因可能取决于ObjectQuery,它在给定的上下文中接收针对模型的类型化查询,这可能接受值的数组。换句话说,IN子句在LINQ格式上具有相同的含义:

<asp:EntityDataSource ID="EntityDataSource1" runat="server" 
    ConnectionString="name=MyEntities"  DefaultContainerName="MyEntities" 
    EntitySetName="Student" Where="it.Age IN {11,12,13,14}"> 
</asp:EntityDataSource>

生成的SQL命令将变为:

int[] ages = new int[] {11, 12, 13, 14};
var query = MyEntities.Student.Where(it => it.Age.Contains(ages));

其他可能的原因是ASPX页面标记中的服务器控制语法遵循关于attribute value templates的XSLT约定,它将大括号块解释为字符串值表达式,并将括号视为方法参数/表达式封闭(请参阅XSL transformation details )。

类似问题:

EntityDataSource Where Clause in VB.NET

补充参考:

Creating IN Queries