ObjectQuery<T>.GroupBy(String, String, ObjectParameter[]) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Группирует результаты запроса по заданному критерию.
public:
System::Data::Objects::ObjectQuery<System::Data::Common::DbDataRecord ^> ^ GroupBy(System::String ^ keys, System::String ^ projection, ... cli::array <System::Data::Objects::ObjectParameter ^> ^ parameters);
public System.Data.Objects.ObjectQuery<System.Data.Common.DbDataRecord> GroupBy (string keys, string projection, params System.Data.Objects.ObjectParameter[] parameters);
member this.GroupBy : string * string * System.Data.Objects.ObjectParameter[] -> System.Data.Objects.ObjectQuery<System.Data.Common.DbDataRecord>
Public Function GroupBy (keys As String, projection As String, ParamArray parameters As ObjectParameter()) As ObjectQuery(Of DbDataRecord)
Параметры
- keys
- String
Ключевые столбцы, по которым группируются результаты.
- projection
- String
Список выбранных свойств, определяющий проекцию.
- parameters
- ObjectParameter[]
Параметры (ноль или более), используемые в этом методе.
Возвращаемое значение
Новый экземпляр запроса ObjectQuery<T> типа DbDataRecord, эквивалентный первоначальному экземпляру с примененным к нему предложением GROUP BY.
Исключения
Параметр query
имеет значение null
или является пустой строкой.
-или-
Параметр projection
имеет значение null
или является пустой строкой.
Примеры
В данном примере создается новый объект ObjectQuery<T>, содержащий результаты существующего запроса, сгруппированные по названиям продуктов.
using (AdventureWorksEntities context =
new AdventureWorksEntities())
{
string queryString = @"SELECT VALUE product
FROM AdventureWorksEntities.Products AS product";
ObjectQuery<Product> productQuery =
new ObjectQuery<Product>(queryString,
context, MergeOption.NoTracking);
ObjectQuery<DbDataRecord> productQuery2 =
productQuery.GroupBy("it.name AS pn",
"Sqlserver.COUNT(it.Name) as count, pn");
// Iterate through the collection of Products
// after the GroupBy method was called.
foreach (DbDataRecord result in productQuery2)
{
Console.WriteLine("Name: {0}; Count: {1}",
result["pn"], result["count"]);
}
}
}
В этом примере возвращается набор вложенных записей данных, содержащих Contact.LastName
столбец, сгруппированный и отсортированный в алфавитном порядке по первой букве Contact.LastName
.
using (AdventureWorksEntities context =
new AdventureWorksEntities())
{
// Define the query with a GROUP BY clause that returns
// a set of nested LastName records grouped by first letter.
ObjectQuery<DbDataRecord> query =
context.Contacts
.GroupBy("SUBSTRING(it.LastName, 1, 1) AS ln", "ln")
.Select("it.ln AS ln, (SELECT c1.LastName " +
"FROM AdventureWorksEntities.Contacts AS c1 " +
"WHERE SubString(c1.LastName, 1, 1) = it.ln) AS CONTACT")
.OrderBy("it.ln");
// Execute the query and walk through the nested records.
foreach (DbDataRecord rec in
query.Execute(MergeOption.AppendOnly))
{
Console.WriteLine("Last names that start with the letter '{0}':",
rec[0]);
List<DbDataRecord> list = rec[1] as List<DbDataRecord>;
foreach (DbDataRecord r in list)
{
for (int i = 0; i < r.FieldCount; i++)
{
Console.WriteLine(" {0} ", r[i]);
}
}
}
}
Комментарии
GroupBy применяет проекцию, заданную параметром projection
. Это означает, что свойство ObjectQuery<T>, возвращаемое методом GroupBy, всегда будет иметь тип DbDataRecord. Дополнительные сведения см. в разделе Запросы объектов.