查询多对多关系

时间:2018-09-07 02:38:05

标签: c# linq asp.net-core many-to-many

我在asp.net官方核心文档上看到了有关关系的帖子: asp.net core model relationships

takePicture = async function() {
    if (this.camera) {
        const options = { quality: 0.5, base64: true };
        const data = await this.camera.takePictureAsync(options)
        console.log(data.uri);
        this.setState({path: data.uri});
        const tessOptions = {
            whitelist: null, 
            blacklist: '1234567890\'!"#$%&/()={}[]+*-_:;<>'
        };
        RNTesseractOcr.recognize(data.uri, 'LANG_INDONESIAL', tessOptions)
            .then((result) => {
            // this.setState({ ocrResult: result });
            console.log("OCR Result: ", result);
            })
            .catch((err) => {
            console.log("OCR Error: ", err);
            })
            .done();
    }
};

如果我想返回所有标签的列表,则可以这样做:

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }

    public List<PostTag> PostTags { get; set; }
}

public class Tag
{
    public string TagId { get; set; }

    public List<PostTag> PostTags { get; set; }
}

public class PostTag
{
    public int PostId { get; set; }
    public Post Post { get; set; }

    public string TagId { get; set; }
    public Tag Tag { get; set; }
}

如何返回标签及其所应用的帖子数?

示例=

  

预算(3)

1 个答案:

答案 0 :(得分:2)

首先创建一个视图模型类来表示您要传递的数据

public class PostCount
{
    public string Name { get; set; }
    public int Count { get; set; }
}

现在,在操作方法中,您可以查询Tags集合并在每个Count对象的PostTags属性上调用Tag方法。在LINQ表达式中,您可以进行投影以创建视图模型对象。

public async Task<IEnumerable<PostCount>> AllTags()
{
    var tags = await _context.Tags
                             .Select(a => new PostCount
                                          {
                                             Name = a.Name,
                                             Count = a.PostTags.Count()
                                          }
                                    ).ToListAsync();

    return tags;
}

当您访问此操作方法时,上面的操作将返回您想要的数据。

如果要在视图中显示此视图,则可以将我们创建的列表返回到视图。在您的视图中,该视图的类型很强,是PostCount类的列表,您可以呈现标签名称及其发布数

public async Task<IEnumerable<PostCount>> AllTags()
{
    var tags = await _context.Tags.Select(a => new PostCount
    {
        Name = a.Name,
        Count = a.PostTags.Count()
    }).ToListAsync();

    return View(tags);
}

并在您的AllTags.cshtml视图中

@model List<PostCount>
<h3>Tags</h3>
@foreach(var tag in Model)
{
  <p>@tag.Name  @tag.Count </p>
}

另外,您可能需要在PostTag类中拥有一个主键属性

public class PostTag
{
   public int Id  { set;get; }
   // other properties you have
}