Linq在1对多关系中的2个类之间的表达式

时间:2015-10-11 02:10:52

标签: c# linq

我有两个班级:

 public class Op
{
    [Key]
    public int OpId { get; set; }
    private OpportunitiesDb db = new OpportunitiesDb();

    [Required(ErrorMessage = "Opportunity title is required")]
    [DisplayName("Opportunity Title")]
    public string Title { get; set; }

    [DisplayName("Tags")]
    public ICollection<Tags> Tags { get; set; }
 }


 public class Tags
{
    [Key]
    public int Id { get; set; }
    public int OpId { get; set; }
    public string Tag { get; set; }

}

我有1类Type OpId。 Op类可以有许多标签(一对多关系)。

此OpId有一个标记让我们假设&#34; Water&#34;

现在我需要在标签中找到所有拥有&#34; Water&#34;作为标签。 db上下文有2个表(Ops和Tags)。

我的控制器的动作是:         public async Task QueryTags(int?id)         {             if(id == null)             {                 return RedirectToAction(&#34; IdNotPresent&#34;,&#34;错误&#34;);             }

        Op SelectedOp = db.Opportunities.Find(id);
        //get tags for ID.
        var Tags = db.Tags
            .Where(s => s.OpId == id);



        var model =
            from r in db.Tags
            where (r.OpId == id)
            select r;
        return PartialView(await model.ToListAsync());
    }

2 个答案:

答案 0 :(得分:0)

Tag分组

from r in db.Tags
join o in db.Ops on r.OpId equals o.OpId
group o by r.Tag into ops
select ops

按标记过滤以获取您正在寻找的行动

答案 1 :(得分:0)

我需要的是这个搜索,这将带来所有在字符串Query var中具有相同标记的Ops:

var AllOpsWithTagQuery = from r in db.Tags
           where(r.Tag.StartsWith(Query))
           join o in db.Opportunities on r.OpId equals o.OpId
           select o;