日期:2014-05-20  浏览次数:20835 次

多对多表查询的问题
hi
又是我。
问一个多对多表查询的问题
先上相关代码吧。有精简
C# code


  public class Tasks
    {
        public Tasks()
        {
            this.Tags = new List<Tag>();
        }

        public int TaskId { get; set; }

        public int UserId { get; set; }

        public string TaskName {get;set;}
        public virtual UserInfo UserInfo { get; set; }
        public virtual ICollection<Tag> Tags { get; set; }
    }

public class Tag
    {
        public Tag()
        {
            this.Tasks = new List<Tasks>();
        }

        public int TagId { get; set; }
        public int UserId { get; set; }
        public string TagName { get; set; }
        public virtual UserInfo UserInfo { get; set; }
        public virtual ICollection<Tasks> Tasks { get; set; }
    }
        

           //Mapping 

            // Relationships
            this.HasMany(t => t.Tags)
                .WithMany(t => t.Tasks)
                .Map(m =>
                    {
                        m.ToTable("TaskTag");
                        m.MapLeftKey("TaskId");
                        m.MapRightKey("TagId");
                    });





这样就生成了三张表
Tasks TaskTag Tag

现在想查某用户下,所有标注了某 TAG 的 task
如果用 SQL 语句写的话是这样的
SQL code


select tasks.* from tasks
left join tasktag on tasks.taskid = tasktag.taskid
left join tag on  tag.tagid = TaskTag.tagid 
where tag.tagname='test'




现在我的项目用的是 EF4.1 + Repository 模式。
我比较笨。只能写出

  var q = from c in taskRepository.GetMany(o => o.UserId == uesrId)
  join t in tagRepository.GetMany( g => g.TagName == tagName) 

这样的代码了。
后面的写不出来了。
请各位高手帮忙看看。后面的代码如何写





------解决方案--------------------
完整例子自己Q我,我发你,昨晚我看见你的信息了,太困了,就睡了