DataContext.ExecuteQuery 方法

定义

重载

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实体。

ObjectTrackingEnabledtrue

实体具有主键。

否则会引发异常。

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

返回

IEnumerable<TResult>

由查询返回的对象的集合。

示例

以下示例演示此方法的一种用法:

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> 是由 显式跟踪的实体。DataContext

    • ObjectTrackingEnabled 为 true。

    • 实体具有主键。

    否则会引发异常。

  • 在所有其他情况下,查询只能检索对象的跟踪字段和属性的子集。

适用于