방법: 기본 형식의 컬렉션을 반환하는 쿼리 실행(Entity Framework)
이 항목에서는 기본 형식의 컬렉션을 반환하는 쿼리를 실행하는 방법에 대한 예제를 제공합니다. 단일 개체만 반환하려면 쿼리를 기반으로 First, FirstOrDefault, Single 및 SingleOrDefault 메서드 중 하나를 사용합니다.
또한 동일한 예제에서 다음의 Entity Framework 쿼리 기술을 각각 사용한 경우도 보여 줍니다.
LINQ to Entities
ObjectQuery<T>가 포함된 Entity SQL
ObjectQuery<T>의 쿼리 작성기 메서드
이 항목의 예제는 Adventure Works Sales 모델을 기반으로 합니다. 이 항목의 코드를 실행하려면 프로젝트에 Adventure Works Sales 모델을 추가하고 프로젝트에서 Entity Framework를 사용하도록 구성해야 합니다. 자세한 내용은 방법: 엔터티 데이터 모델 마법사 사용(Entity Framework) 또는 방법: Entity Framework 프로젝트 수동 구성 및 방법: 엔터티 데이터 모델 수동 정의(Entity Framework)를 참조하십시오.
예제
다음은 LINQ to Entities 예제입니다.
Dim contactId As Integer = 377
Using context As New AdventureWorksEntities()
' Select a value.
Dim orders As ObjectSet(Of SalesOrderHeader) = context.SalesOrderHeaders
Dim orderQuery As IQueryable(Of Int32) = From order In orders _
Where order.Contact.ContactID = contactId _
Select order.PurchaseOrderNumber.Length
' Iterate through the collection of values.
For Each result As Int32 In orderQuery
Console.WriteLine("{0}", result)
Next
' Use a nullable DateTime value because ShipDate can be null.
Dim shipDateQuery As IQueryable(Of System.Nullable(Of DateTime)) = From order In orders _
Where order.Contact.ContactID = contactId _
Select order.ShipDate
' Iterate through the collection of values.
For Each shipDate As System.Nullable(Of DateTime) In shipDateQuery
Dim shipDateMessage As String = "date not set"
If shipDate IsNot Nothing Then
shipDateMessage = shipDate.ToString()
End If
Console.WriteLine("Ship Date: {0}.", shipDateMessage)
Next
End Using
int contactId = 377;
using (AdventureWorksEntities context
= new AdventureWorksEntities())
{
// Select a value.
ObjectSet<SalesOrderHeader> orders
= context.SalesOrderHeaders;
IQueryable<Int32> orderQuery =
from order in orders
where order.Contact.ContactID == contactId
select order.PurchaseOrderNumber.Length;
// Iterate through the collection of values.
foreach (Int32 result in orderQuery)
{
Console.WriteLine("{0}", result);
}
// Use a nullable DateTime value because ShipDate can be null.
IQueryable<DateTime?> shipDateQuery =
from order in orders
where order.Contact.ContactID == contactId
select order.ShipDate;
// Iterate through the collection of values.
foreach (DateTime? shipDate in shipDateQuery)
{
string shipDateMessage = "date not set";
if (shipDate != null)
{
shipDateMessage = shipDate.ToString();
}
Console.WriteLine("Ship Date: {0}.", shipDateMessage);
}
}
다음은 Entity SQL 예제입니다.
Dim contactId As Integer = 377
Using context As New AdventureWorksEntities()
Dim orderQueryString As String = "SELECT VALUE Length(order.PurchaseOrderNumber) FROM " & _
" AdventureWorksEntities.SalesOrderHeaders AS order WHERE order.CustomerID = @contactId"
Dim shipDateQueryString As String = "SELECT VALUE order.ShipDate" & _
" FROM AdventureWorksEntities.SalesOrderHeaders AS order WHERE order.CustomerID = @contactId"
' Use the SelectValue method to select a value.
Dim orderQuery As New ObjectQuery(Of Int32)(orderQueryString, context, MergeOption.NoTracking)
orderQuery.Parameters.Add(New ObjectParameter("contactId", contactId))
' Iterate through the collection of values.
For Each result As Int32 In orderQuery
Console.WriteLine("{0}", result)
Next
' Use a nullable DateTime value because ShipDate can be null.
Dim shipDateQuery As New ObjectQuery(Of Nullable(Of DateTime))(shipDateQueryString, context, MergeOption.NoTracking)
shipDateQuery.Parameters.Add(New ObjectParameter("contactId", contactId))
' Iterate through the collection of values.
For Each shipDate As Nullable(Of DateTime) In shipDateQuery
Dim shipDateMessage As String = "date not set"
If shipDate IsNot Nothing Then
shipDateMessage = shipDate.ToString()
End If
Console.WriteLine("Ship Date: {0}.", shipDateMessage)
Next
End Using
int contactId = 377;
using (AdventureWorksEntities context =
new AdventureWorksEntities())
{
string orderQueryString = @"SELECT VALUE Length(order.PurchaseOrderNumber)
FROM AdventureWorksEntities.SalesOrderHeaders AS order
WHERE order.CustomerID = @contactId";
string shipDateQueryString = @"SELECT VALUE order.ShipDate
FROM AdventureWorksEntities.SalesOrderHeaders AS order
WHERE order.CustomerID = @contactId";
// Use the SelectValue method to select a value.
ObjectQuery<Int32> orderQuery =
new ObjectQuery<Int32>(orderQueryString,
context, MergeOption.NoTracking);
orderQuery.Parameters.Add(
new ObjectParameter("contactId", contactId));
// Iterate through the collection of values.
foreach (Int32 result in orderQuery)
{
Console.WriteLine("{0}", result);
}
// Use a nullable DateTime value because ShipDate can be null.
ObjectQuery<Nullable<DateTime>> shipDateQuery =
new ObjectQuery<Nullable<DateTime>>(shipDateQueryString,
context, MergeOption.NoTracking);
shipDateQuery.Parameters.Add(
new ObjectParameter("contactId", contactId));
// Iterate through the collection of values.
foreach (Nullable<DateTime> shipDate in shipDateQuery)
{
string shipDateMessage = "date not set";
if (shipDate != null)
{
shipDateMessage = shipDate.ToString();
}
Console.WriteLine("Ship Date: {0}.", shipDateMessage);
}
}
다음은 쿼리 작성기 메서드 예제입니다.
Dim contactId As Integer = 377
Using context As New AdventureWorksEntities()
' Use the SelectValue method to select a value.
Dim orderQuery As ObjectQuery(Of Int32) = context.SalesOrderHeaders.Where("it.CustomerID = @contactId", _
New ObjectParameter("contactId", contactId)).SelectValue(Of Int32)("Length(it.PurchaseOrderNumber)")
' Iterate through the collection of values.
For Each result As Int32 In orderQuery
Console.WriteLine("{0}", result)
Next
' Use a nullable DateTime value because ShipDate can be null.
Dim shipDateQuery As ObjectQuery(Of Nullable(Of DateTime)) = _
context.SalesOrderHeaders.Where("it.CustomerID = @contactId", _
New ObjectParameter("contactId", contactId)).SelectValue(Of Nullable(Of DateTime))("it.ShipDate")
' Iterate through the collection of values.
For Each shipDate As Nullable(Of DateTime) In shipDateQuery
Dim shipDateMessage As String = "date not set"
If shipDate IsNot Nothing Then
shipDateMessage = shipDate.ToString()
End If
Console.WriteLine("Ship Date: {0}.", shipDateMessage)
Next
End Using
int contactId = 377;
using (AdventureWorksEntities context =
new AdventureWorksEntities())
{
// Use the SelectValue method to select a value.
ObjectQuery<Int32> orderQuery =
context.SalesOrderHeaders
.Where("it.CustomerID = @contactId",
new ObjectParameter("contactId", contactId))
.SelectValue<Int32>("Length(it.PurchaseOrderNumber)");
// Iterate through the collection of values.
foreach (Int32 result in orderQuery)
{
Console.WriteLine("{0}", result);
}
// Use a nullable DateTime value because ShipDate can be null.
ObjectQuery<Nullable<DateTime>> shipDateQuery =
context.SalesOrderHeaders
.Where("it.CustomerID = @contactId",
new ObjectParameter("contactId", contactId))
.SelectValue<Nullable<DateTime>>("it.ShipDate");
// Iterate through the collection of values.
foreach (Nullable<DateTime> shipDate in shipDateQuery)
{
string shipDateMessage = "date not set";
if (shipDate != null)
{
shipDateMessage = shipDate.ToString();
}
Console.WriteLine("Ship Date: {0}.", shipDateMessage);
}
}
참고 항목
작업
방법: 엔터티 형식 개체를 반환하는 쿼리 실행(Entity Framework)
방법: 익명 형식의 컬렉션을 반환하는 쿼리 실행(Entity Framework)
방법: 매개 변수가 있는 쿼리 실행(Entity Framework)