0

SQL では、 Organization(id, name)Category(id, name)Catalog(org_id, cat_id) の3 つのテーブルがあります - Organizations と Categories の間のマッピング テーブル。私のために作成されたADO.NET DbContext Generator 2つのクラス:

public partial class Organization
{
    public Organization()
    {            
        this.Category = new HashSet<Category>();
    }

    public int id { get; set; }
    public string name { get; set; }       

    public virtual ICollection<Category> Category { get; set; }
}

public partial class Category
{
    public Category()
    {
        this.Organization = new HashSet<Organization>();
    }

    public int id { get; set; }
    public string name { get; set; }       

    public virtual ICollection<Organization> Organization { get; set; }
}

LINQ を使用して cat_id = 1 にマップされたすべての組織を選択するにはどうすればよいですか? t-sqlを使用して行うように:

SELECT * 
FROM Organization o
INNER JOIN Catalog ct ON o.id = ct.org_id
INNER JOIN Category cg ON ct.cat_id = cg.id
WHERE cg.id = 1

私は試した

var model = _db.Category
            .Where(c => c.id == 1)
            .Select(c => c.Organization);

しかし、ビューで定義された型に問題があります

@model IEnumerable<Project1.Models.Organization>
4

1 に答える 1

0

そこのコードから、クエリから Enumerable を作成していないと推測できます。あなたのコード:

var model = _db.Category.Where(c => c.id == 1).Select(c => c.Organization);

モデルが定義されているため、列挙可能ではありません。試す:

var model = _db.Category.Single(c => c.id == 1).Organizations.ToList();

これにより、クエリが結果の列挙に変換され、モデルの要件が満たされます。

EDIT もう一度見ると、あなたのモデルは 1:M の関係ではないように見えます。これが問題である可能性があります。

于 2012-05-28T12:34:59.557 に答える