当前位置: 首页 > 知识库问答 >
问题:

使用LINQ to实体的内部查询(子查询),在列表中返回IEnumerable列表

袁帅
2023-03-14

我试图从表文章列表的文章与类别列表,每篇文章是列出的。假设文章“A”有3个类别“1”,“2”,“3”,我有一个以上的文章有一个以上的类别。我想在ArticleViewModel的列表中获得CategoryViewModel的列表。因为它是IEnumerableList,所以当我使用FirstOrDefault()时,我会在每个文章下获得相同的类别名称,但获得的文章数量是正确的。我如何才能获得类别名称(列表)内的文章(列表)。

    public class ArticleViewModel
    {
        public int ArticleID { get; set; }
        public int AuthorID { get; set; }
        public string AuthorName { get; set; }
        public string Username { get; set; }
        public string Slug { get; set; }
        public string Title { get; set; }
        public string ArticleContent { get; set; }
        public DateTime PostDate { get; set; }
        public Nullable UpdatedDate { get; set; }
        public int ArticleCategoryID { get; set; }
        public int CategoryID { get; set; }
        public IEnumerable CategoryNames { get; set; }
        public int TagID { get; set; }
        public string TagName { get; set; }
    }
    public class CategoryViewModel
    {
        public int CategoryID { get; set; }
        public string CategoryName { get; set; }
    }

 public partial class ArticleCategory
    {
        public int ArticleCategoryID { get; set; }
        public int ArticleID { get; set; }
        public int CategoryID { get; set; }

        public virtual Article Article { get; set; }
        public virtual Category Category { get; set; }

查询

result = (from articles in db.Articles
                join articlecategories in db.ArticleCategories on articles.ArticleID equals articlecategories.ArticleID
                join cat in db.Categories on articlecategories.CategoryID equals cat.CategoryID
                join auth in db.Authors on articles.AuthorID equals auth.AuthorID
                select new ArticleViewModel
                {
                    AuthorName = auth.AuthorName,
                    Username = auth.UserName,

                    CategoryNames = (from a in db.Articles
                                    //from ca in db.ArticleCategories
                                    //from c in db.Categories group c by c.CategoryName into group1
                                    join ca in db.ArticleCategories on articlecategories.ArticleID equals ca.ArticleID
                                    join c in db.Categories on cat.CategoryID equals c.CategoryID into group1                                               
                                    select new CategoryViewModel
                                    {                                                  
                                        CategoryName = (from group2 in group1 select group2.CategoryName).FirstOrDefault()
                                    //   CategoryID = (from group2 in group1 select group2.CategoryID).FirstOrDefault()
                                    }),

                    Title = articles.Title,
                    Slug = articles.Slug,
                    ArticleContent = articles.ArticleContent,
                    PostDate = articles.PostDate
                }).GroupBy(a => a.Title).Select(a => a.FirstOrDefault()).OrderByDescending(article => article.PostDate).ToList().ToPagedList(pageIndex, pageSize);

共有1个答案

孟楷
2023-03-14

好吧,过了几天。我意识到这是试图把事情做过头。我的错!修复很简单;在视图模型中将类别更改为IEnumerable 类别{get;set;}

并将LinQ更改为

result = (from articles in db.Articles
                              join articlecategories in db.ArticleCategories on articles.ArticleID equals articlecategories.ArticleID
                              join cat in db.Categories on articlecategories.CategoryID equals cat.CategoryID
                              join auth in db.Authors on articles.AuthorID equals auth.AuthorID
                              join tags in db.ArticleTags on articles.ArticleID equals tags.ArticleID

                              select new ArticleViewModel
                              {
                                  ArticleID=articles.ArticleID,
                                  AuthorName = auth.AuthorName,
                                  Username = auth.UserName,
                                  Title = articles.Title,
                                  Slug = articles.Slug,
                                  ArticleContent = articles.ArticleContent,
                                  PostDate = articles.PostDate,
                                  CategoryNames = from icat in articles.ArticleCategories select icat.Category.CategoryName,
                                  Tags = from itags in articles.ArticleTags select itags.Tag.TagName

                              }).GroupBy(a => a.Title).Select(a => a.FirstOrDefault()).ToPagedList(pageIndex, pageSize);
 类似资料:
  • 问题内容: 我正在创建一条SQL语句,该语句将按月返回销售摘要。 该摘要将列出一些简单的列,用于显示日期,总销售数量和总销售价值。 但是,除了这些列之外,我还要再添加3个,以按花费金额列出最佳客户月份。对于这些列,我需要某种内联子查询,这些子查询可以返回其ID,名称和所花费的金额。 我目前的工作是使用内联语句,但是,根据我对如何实现这些语句的了解,每个内联语句只能返回一个列和一行。 为了解决我的情

  • 问题内容: 是否可以在使用MySQL的子查询中引用外部查询?我知道在 某些 情况下这是可能的: 但是我想知道这样的事情是否可以工作: 我知道我可以使用或通过将外部子句拉入子查询来实现相同目的,但是我需要这样做来自动生成SQL,并且由于各种其他原因,不能使用任何一种替代方法。 更新 :对不起,这个问题引起了一些混乱:第一个查询只是一个可行的示例,以演示我 不需要的 东西。 更新2 :我需要两个u.i

  • 我使用Java EE7和GlassFish 4.1服务器来构建一个系统,基本上你可以在这个系统中发表想法,每个想法都可以有标签。我已经把实体的概念声明为: 阅读JPA:查询实体中的可嵌入列表后,我尝试通过Tag以以下方式查找: 但是我得到了一个TransactionRolledbackLocalException,原因是: 导致:java.lang.IllegalArgumentException

  • 问题内容: 如何获取使用SQL Server的SQL查询返回的列数? 例如,如果我有如下查询: 它应该返回表A1中的总列数+表A2中的总列数。但是查询可能会更复杂。 问题答案: 这是一种方法: 您可以通过创建视图来执行类似的操作。

  • 问题内容: 我有一个简单的jpa实体“ ApplicationForm”,其中有一对多列表: ApplicationForm中包含的变量Dictionary是仅带有问题文本的另一个普通实体。字典映射的相应数据库表为: 我想知道是否可以使用jpa或hibernate建立一个查询,以使用特定语言环境(例如“ it”)的Dictionary检索ApplicationForm实体。使用标准sql可以轻松完

  • 问题内容: 这是我正在尝试做的事情和获得的最简单的工作示例: 我有一个查询,如下所示: 注意: tran_party.team_id_redirect 是引用 team.team_id 的外键。 电流输出: 预期产量: 我希望列中的重复项仅被选择一次,如下所示: 我试过的 我写了一个内联视图,而不是直接从中选择,而是从tran_party中选择不同的值,如下所示: 尽管这确实给了我预期的输出,但是