DataContext.ExecuteQuery 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
重载
ExecuteQuery(Type, String, Object[]) |
直接对数据库执行 SQL 查询。 |
ExecuteQuery<TResult>(String, Object[]) |
直接对数据库执行 SQL 查询并返回对象。 |
ExecuteQuery(Type, String, Object[])
直接对数据库执行 SQL 查询。
public:
System::Collections::IEnumerable ^ ExecuteQuery(Type ^ elementType, System::String ^ query, ... cli::array <System::Object ^> ^ parameters);
public System.Collections.IEnumerable ExecuteQuery (Type elementType, string query, params object[] parameters);
member this.ExecuteQuery : Type * string * obj[] -> System.Collections.IEnumerable
Public Function ExecuteQuery (elementType As Type, query As String, ParamArray parameters As Object()) As IEnumerable
参数
- elementType
- Type
要返回的 IEnumerable<T> 的类型。
使查询结果中的列与对象中的字段或属性相匹配的算法如下所示:
如果字段或属性映射到特定列名称,则结果集中应包含该列名称。
如果未映射字段或属性,则结果集中应包含其名称与该字段或属性相同的列。
通过先查找区分大小写的匹配来执行比较。 如果未找到匹配项,则会继续搜索不区分大小写的匹配项。
如果同时满足下列所有条件,则该查询应当返回(除延迟加载的对象外的)对象的所有跟踪的字段和属性:
T
是由 显式跟踪的 DataContext实体。
ObjectTrackingEnabled 为 true
。
实体具有主键。
否则会引发异常。
- query
- String
要执行的 SQL 查询。
- parameters
- Object[]
要传递给命令的参数数组。 注意以下行为:
如果数组中的对象的数目小于命令字符串中已标识的最大数,则会引发异常。
如果数组包含未在命令字符串中引用的对象,则不会引发异常。
如果某参数为 null
,则该参数会转换为 DBNull.Value
。
返回
由查询返回的对象的 IEnumerable<T> 集合。
适用于
ExecuteQuery<TResult>(String, Object[])
直接对数据库执行 SQL 查询并返回对象。
public:
generic <typename TResult>
System::Collections::Generic::IEnumerable<TResult> ^ ExecuteQuery(System::String ^ query, ... cli::array <System::Object ^> ^ parameters);
public System.Collections.Generic.IEnumerable<TResult> ExecuteQuery<TResult> (string query, params object[] parameters);
member this.ExecuteQuery : string * obj[] -> seq<'Result>
Public Function ExecuteQuery(Of TResult) (query As String, ParamArray parameters As Object()) As IEnumerable(Of TResult)
类型参数
- TResult
返回的集合中的元素的类型。
参数
- query
- String
要执行的 SQL 查询。
- parameters
- Object[]
要传递给命令的参数数组。 注意以下行为:
如果数组中的对象的数目小于命令字符串中已标识的最大数,则会引发异常。
如果数组包含未在命令字符串中引用的对象,则不会引发异常。
如果某参数为 null,则该参数会转换为 DBNull.Value
。
返回
由查询返回的对象的集合。
示例
以下示例演示此方法的一种用法:
var customers = db.ExecuteQuery<Customer>(@"SELECT CustomerID, CompanyName, ContactName, ContactTitle,
Address, City, Region, PostalCode, Country, Phone, Fax
FROM dbo.Customers
WHERE City = {0}", "London");
foreach (Customer c in customers)
Console.WriteLine(c.ContactName);
Dim customers = db.ExecuteQuery(Of Customer)("SELECT CustomerID, _
CompanyName, ContactName, ContactTitle, _
Address, City, Region, PostalCode, Country, Phone, Fax _
FROM dbo.Customers _
WHERE City = {0}", "London")
For Each c As Customer In customers
Console.WriteLine(c.ContactName)
Next
注解
此方法是一种传递机制,适用于 LINQ to SQL 未为特定方案提供的情况。
将查询结果中的列与对象中的字段和属性匹配的算法的工作原理如下:
如果字段或属性映射到特定列名称,则结果集中应包含该列名称。
如果未映射字段或属性,则结果集中应包含其名称与该字段或属性相同的列。
比较是通过首先查找区分大小写的匹配项来执行的。 如果未找到此类匹配项,则会对不区分大小写的匹配进行后续搜索。
如果满足以下所有条件,则查询必须返回对象的所有跟踪字段和属性 (,但受延迟加载) 除外:
如果
<T>
是由 显式跟踪的实体。DataContextObjectTrackingEnabled 为 true。
实体具有主键。
否则会引发异常。
在所有其他情况下,查询只能检索对象的跟踪字段和属性的子集。