如何从联结表代码中读取数据的第一种方法

时间:2012-03-02 08:56:57

标签: entity-framework ef-code-first

如何在Code first方法中从联结表中检索数据。我知道我可以添加这样的数据。

 Movie.Tag.Add(item)

但想知道如何在联结表中找回这些数据

1 个答案:

答案 0 :(得分:1)

这为您提供了联结表中的所有行 - 每一行都表示为一个匿名对象,该行的两个ID作为属性:

var junctionTableDataList = (from m in context.Movies
                             from t in m.Tags
                             select new
                             {
                                 MovieId = m.MovieId,
                                 TagId = t.TagId
                             }).ToList();

如果您想将结果限制为特定或几部电影,可以在where之前添加select子句。

修改

与扩展方法和lambda表达式相同的内容如下所示:

var junctionTableDataList = context.Movies
    .SelectMany(m => m.Tags.Select(t => new
    {
        MovieId = m.MovieId,
        TagId = t.TagId
    }))
    .ToList();

修改2

如果要从方法返回数据,可以创建一个litte帮助器类型并返回这些“命名”对象的列表而不是匿名对象:

public class JunctionData
{
    public int MovieId { get; set; }
    public int TagId { get; set; }
}

List<JunctionData> junctionTableDataList
    = (from m in context.Movies
       from t in m.Tags
       select new JunctionData
       {
           MovieId = m.MovieId,
           TagId = t.TagId
       }).ToList();

...Select(t => new JunctionData...获取扩展方法语法。