简体   繁体   English

用linq连接表

[英]Join tables with linq

I have 4 tables: 我有4张桌子:

  • Topics 主题
  • RelyTopics RelyTopics
  • TagTopics TagTopics
  • TagNames. 标记名。

I want to execute query with join and get 2 outputs: 我想用join和get 2输出执行查询:

  • join 2 tables Topics, RelyTopics 加入2个表主题,RelyTopics
  • and join 2 tables TagTopics, TagNames 并加入2个表TagTopics,T​​agNames

both on the same view. 两者都在同一个观点上。

In the Controller I have this code: 在Controller中我有这个代码:

public ActionResult Index()
{
    var query1 = from to in db.Topics 
                      join rel in db.RelyTopics  on to.IdTopic equals rel.Id
                     select new TopicAndDetails
                     {
                         Topic = to,
                         RelyTopic = rel,
                     };
    var query2 = from tag in db.TagTopics
                join na in db.TagNames on tag.IdTag equals na.IdName
                select new TopicAndDetails
                {
                    TagTopic = tag,
                    NameTag = na,
                };

    var relytopics = new TopicAndDetails(query1, query2) ; //??????

    return View(relytopics.ToList());
}

In the Model have this code: 在Model中有这个代码:

 public partial class TopicAndDetails
{
    public Topic Topic { get; set; }
    public TagName NameTag { get; set; }

    public TagTopic TagTopic { get; set; }
    public RelyTopic RelyTopic { get; set; }
}

Create your navigation properties first: https://msdn.microsoft.com/en-us/library/jj713564(v=vs.113).aspx , then you can do this: 首先创建导航属性: https//msdn.microsoft.com/en-us/library/jj713564(v = vs133).aspx ,然后你可以这样做:

public ActionResult Index()
{
  return db.Topics.Select(t=>new TopicAndDetails {Topic=t})
    .Concat(db.TagTopics.Select(tt=>new TopicAndDetails {TagTopic=tt));
}
public partial class TopicAndDetails
{
    public Topic Topic { get; set; }
    public TagTopic TagTopic { get; set; }
}

Your ViewModel would then be IQueryable<TopicAndDetails> or IEnumerable<TopicAndDetails> 您的ViewModel将是IQueryable<TopicAndDetails>IEnumerable<TopicAndDetails>

Or this would make more sense probably: 或者这可能更有意义:

public ActionResult Index()
{
  return new TopicAndDetails {
    Topics = db.Topics.ToList(),
    TagTopics = db.TagTopics.ToList()
  };
}
public partial class TopicAndDetails
{
    public List<Topic> Topics { get; set; }
    public List<TagTopic> TagTopics { get; set; }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM