查询:从数据源检索信息
您使用“查询”可返回符合一组条件的数据。例如,如果您想要知道您的客户有多少居住在美国,您将创建扫描客户列表的查询,并检查其地址中指定的国家/地区。
您可以创建查询,并将其保存到您的应用程序的模型中。然后,可以使用“查询设计器”来指定搜索条件。如果查询设计器不提供所需的功能,则可通过编写某些代码来扩展查询。指定条件后,使用屏幕中的查询,或将其作为您业务逻辑的一部分运行。
创建查询
在**“解决方案资源管理器”**中,您可以创建查询。查询只基于您应用程序的模型中的一个实体或表(例如,Customer 实体)。查询也可以基于您应用程序的模型中的其他查询。该查询所基于的实体、表或查询称为该查询的“源”数据。有关更多信息,请参见 如何:添加、删除和修改查询。
使用查询设计器来设计查询
在大多数情况下,您可以使用查询设计器以可视化方式来设计查询。通过在设计器中选择,将“筛选条件”和“筛选组”、“排序术语”和“参数”添加到查询中。有关更多信息,请参见 如何:使用查询设计器设计查询。
筛选条件
您可以通过添加一个或多个筛选条件来缩小查询的结果。筛选条件描述的是每行数据必须符合的规则。符合查询结果中包含的规则的行。筛选条件包含以下三个基本部分:
选择属性
比较值
运算符
选择属性是您要用作筛选条件的基础的属性。例如,若要返回某一订单日期的销售订单,可以使用 OrderDate 作为选择属性。选择属性可以是源数据中的属性,也可以是相关实体或表的属性。在查询设计器中,属性仅会出现具有零个到一个或一个多重性的相关实体或表上。例如,销售订单只有一个客户。因此,在销售订单返回的查询中,您可以选择相关客户的属性作为筛选条件的一部分。如果您要使用具有多个多重性的相关实体或表,必须通过使用代码来扩展查询。
将“比较值”与选择属性相比。比较值可以是文本值,如字符串“2009 年 9 月 22 日 12:00:00 上午”、选择属性、参数,也可以是相对值,如**“现在”、“今天”或“每周开始”**。
“运算符”是用来指定您要进行比较的类型的符号。例如,若要返回订单日期是早于“2009 年 9 月 22 日 12:00:00 上午”的销售订单,可以选择“<”运算符。
本示例中描述的完整筛选条件是 Where OrderDate < 9/22/2009 12:00:00 AM。
您可以通过使用以下逻辑运算符之一,将筛选条件与其他筛选条件进行关联:And、Or、And Not 和 Or Not。
您可通过在设计器中将条件拖到所需的位置,以更改其顺序。
下面的插图显示了筛选条件中的一部分。
筛选组
您可以将筛选条件组合在一起,以便其作为独立于其他筛选条件的单个条件。若要做到这一点,在查询设计器中创建“筛选组”。
对筛选条件分组就像在数学等式或逻辑表达式中用圆括号括起来。当您对条件分组时,出现在组中的第一个条件之前的逻辑运算符将适用于整个组。
与单独的筛选条件一样,可通过将筛选组拖到所需的位置,以更改其在列表中的顺序。
下面的插图显示两个筛选器组。
排序术语
您可以通过添加一个或多个排序术语来指定在查询结果中出现的记录的默认顺序。排序术语包含属性和方向(例如,OrderDate 和 Ascending)。排序术语定义屏幕中出现的记录的默认排序顺序。通过在屏幕的用户界面 (UI) 上进行选择,用户可以按不同的顺序查看记录。在查询设计器中,可通过将排序术语拖到所需的位置,以更改其在列表中的顺序。
参数
您可以使用户能够动态筛选查询结果。例如,您可以使用户通过选择特定的销售区域,在屏幕上查看区域销售订单。若要支持这种情况,将参数添加到查询,并对该查询进行相应的命名(例如,SalesTerritory)。然后将筛选器的比较值设为参数。例如,查询表达式可以为 Where TerritoryID = SalesTerritory。
您可以设计用户可以用来在运行时提供参数值的屏幕。有关更多信息,请参见 如何:向查询参数提供值。
使用代码扩展查询
该查询设计器不支持某些类型的筛选条件。如果您在设计器中遇到限制,可以通过使用代码将条件添加到您的查询中。
说明 |
---|
您无法扩展屏幕的查询。您只可以扩展在“解决方案资源管理器”中出现的查询。有关编辑屏幕查询的更多信息,请参见 如何:筛选 Silverlight 屏幕上的数据。 |
下表显示两个不能通过使用查询设计器创建的筛选条件。
筛选条件 |
使用代码的原因 |
---|---|
根据销售订单返回前 10 个客户。 |
若要确定销售订单的数量,您必须使用 Count 操作。操作,如 Count, Aggregate 和 Sum,在查询设计器中不可用 |
返回购买了手推车的所有客户。 |
若要确定客户是否购买了手推车,您需要使用引用 Product 实体的筛选条件。因为一个客户可以与几个产品相关联,所以 Product 实体可能会存在于多方 Customer-Product 关系。无法使用查询设计器导航到关系的多方。 |
若要解决此限制,您可以将自定义代码添加到执行查询时调用的方法。有关更多信息,请参见 如何:使用代码扩展查询。
在您的代码中,您可以通过使用标准 LINQ 语法来定义筛选条件。当执行查询时,将会把您在设计器中定义的条件与您在您的代码中定义的条件进行结合,以生成查询结果。
您在代码中定义的任何条件不会作为筛选条件出现在查询设计器中。同样,通过使用查询设计器添加的筛选条件不会出现在这种方法中。如果您要将参数添加到查询中,只能通过使用查询设计器才可添加。您通过使用查询设计器添加的参数显示在该方法的参数列表中。
使用查询
您可以使用屏幕上的查询,也可以作为业务操作的一部分,使用代码运行查询。
在屏幕中使用查询
您可以创建基于自定义查询的屏幕(例如,显示位于美国境内的客户列表的屏幕)。有关更多信息,请参见 如何:创建 Silverlight 屏幕。
您可以将多个查询添加到屏幕。例如,您可以设计一个查询,以显示特定客户的销售订单的列表。您可以将该查询添加到客户屏幕。然后,您可以使用户能够选择要查看所有相关销售订单的客户。有关如何完成该操作的更多信息,请参见 如何:向查询参数提供值。
以代码的形式使用查询
您可以从应用程序的模型中检索查询,然后使用代码运行这些查询。这使您能够使用您的应用程序的业务逻辑中的数据的目标集合。有关更多信息,请参见 如何:使用代码从查询检索数据。
相关主题
标题 |
说明 |
说明可以在 Visual Studio LightSwitch UI 中添加查询的位置。 |
|
介绍如何使用可视化设计器定义查询的筛选条件、参数和排序术语。 |
|
介绍如何使用户能够向查询参数提供值。 |
|
介绍如何以超出设计器能力的方式来修改查询。 |
|
介绍如何处理执行查询之前和之后发生的事件。 |
|
介绍如何使用代码检索并运行查询。 |
|
介绍查询和查询元素的属性。您可以在“属性”窗口中设置这些属性的值。 |