1

私は次のようなクラスを持っています:

public class Category
{
    public int CategoryId { get; set; }
    [Required]
    public string Name { get; set; }
    [NotMapped]
    public int ProductCount { get; set; }
    public virtual IEnumerable<Product> Products { get; set; }
}

現在、次のようなクエリがあります。

context.Categories.SortBy(sortByExpression).Skip(startRowIndex).Take(maximumRows)

カテゴリグリッドにProductCountフィールドを含める必要があります。このLINQクエリを拡張して、Productコレクション全体を読み込まずにProductCountプロパティを取得することはできますか?古き良きSQLを使用してサブクエリでこれを行うことができますが、LINQを使用して困惑しています。

ありがとう

4

2 に答える 2

0

これはおおよそあなたが探しているものですか:

context.Categories.SortBy(sortByExpression).Skip(startRowIndex).Take(maximumRows)
    .Select(c => new { c.CategoryId, c.Name, ProductCount = c.Products.Count() });

または私はあなたの質問を誤解しましたか?

コードを更新しました

于 2013-01-16T00:19:50.330 に答える
0

あなたの質問は十分に明確ではありませんが、私がよく理解していれば、たとえば productCount などの結果に新しい列が必要であり、以下のような SQL クエリでそれを行いました:

SELECT c.*, , (SELECT COUNT(*) FROM Products p WHERE p.categoryId = c.id) AS productCount FROM
Categories c
WHERE <Conditions>

linq を使用してそれを実行できるようにしたい場合 (質問が本当にこれである場合)、次のように実行できます。

List<Category> categoryList = (from c in context.Categories let pCount = c.Products.Count() select
new { categoryId = c.CategoryId, CategoryName = c.Name, productCount = pCount})
.OrderBy([sortByExpression]).Skip([startRowIndex]).Take([maximumRows]).ToList();

この助けを願っています。

于 2015-01-12T12:40:14.713 に答える