Entity framework 如何从连接表中读取数据代码优先方法

Entity framework 如何从连接表中读取数据代码优先方法,entity-framework,ef-code-first,Entity Framework,Ef Code First,如何以代码优先的方式从连接表中检索数据。我知道我可以这样添加数据 Movie.Tag.Add(item) 但是想知道如何取回连接表中的这些数据吗?这将为您提供连接表中的所有行-每一行都表示为一个匿名对象,该行的两个ID作为属性: var junctionTableDataList = (from m in context.Movies from t in m.Tags sele

如何以代码优先的方式从连接表中检索数据。我知道我可以这样添加数据

 Movie.Tag.Add(item)

但是想知道如何取回连接表中的这些数据吗?这将为您提供连接表中的所有行-每一行都表示为一个匿名对象,该行的两个ID作为属性:

var junctionTableDataList = (from m in context.Movies
                             from t in m.Tags
                             select new
                             {
                                 MovieId = m.MovieId,
                                 TagId = t.TagId
                             }).ToList();
如果要将结果限制在特定电影或几部电影中,可以在
选择
之前添加
where
子句

编辑

扩展方法和lambda表达式也是如此:

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

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

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();
公共类连接数据
{
public int MovieId{get;set;}
public int TagId{get;set;}
}
列表junctionTableDataList
=(来自上下文中的m.Movies
从t到m.标签
选择新连接数据
{
MovieId=m.MovieId,
TagId=t.TagId
}).ToList();

…选择(t=>new JunctionData…
用于扩展方法语法。

如果我想在lambda Expression中执行此操作,该怎么办再次感谢您的回答。我希望能够返回junctionTableDataList,以便能够访问junction表中的电影ID。但这是一种匿名类型。我该怎么做呢?谢谢您的回答非常有用pful。我现在的问题是,我想选择所有具有特定标记ID的电影。例如,我想选择所有具有标记ID=2的电影。thanks@JED:请为此创建一个新问题。它不再适合您的初始问题。您也可以单击答案左侧的白色复选标记,表示它解决了问题您的问题中描述的问题。(如果Stackoverflow解决了您的问题,那么以这种方式“接受”答案是一种很好的做法。)