C# 如何将上下文中的多个结果附加到一个列表/变量LINQ C

C# 如何将上下文中的多个结果附加到一个列表/变量LINQ C,c#,entity-framework,linq,C#,Entity Framework,Linq,我正在开发一个用于获取产品/文章的小应用程序,我编写了一个按类型获取文章的方法。类型包含在请求参数中 我试图实现的是:将所有if条件的所有结果附加到一个主列表中,该列表应返回给客户 当我调试和检查查询时,它说它的返回类型是IQueryable,所以基本上我的问题是如何将多个IQueryable附加到一个应该返回给用户的查询中 以下代码无效,因为结果始终为空 我还尝试了var result=newlist;以及后面的result.AddRangequery;我还将返回类型更改为 返回wait re

我正在开发一个用于获取产品/文章的小应用程序,我编写了一个按类型获取文章的方法。类型包含在请求参数中

我试图实现的是:将所有if条件的所有结果附加到一个主列表中,该列表应返回给客户

当我调试和检查查询时,它说它的返回类型是IQueryable,所以基本上我的问题是如何将多个IQueryable附加到一个应该返回给用户的查询中

以下代码无效,因为结果始终为空

我还尝试了var result=newlist;以及后面的result.AddRangequery;我还将返回类型更改为 返回wait result.AsQueryable.toListSync;但很明显,某个地方发生了故障,最后我得到了一个空数组

public async Task<IEnumerable<Article>> GetArticlesByType(ArticleObject request)
{
    var result = new Article[] { }.AsQueryable();
    IQueryable<ArticleDTO> query = null;

    if (request.Food.HasValue && (bool)request.Food)
    {
        // Return type of query is IQueryable<Article> 
        query = _context.Articles.Where(x => x.Active == true && x.ArticleType == ArticleType.Food).Select(x => new Article
        {
            Id = x.Id,
            ArticleName = x.ArticleName
        });
        // Here I just wanted if this condition is satisfied to add values to my result
        result.AsQueryable().Union(query);
    }

    if (request.Drink.HasValue && (bool)request.Drink)
    {
        query = _context.Articles.Where(x => x.Active == true && x.ArticleType == ArticleType.Drink).Select(x => new Article
        {
            Id = x.Id,
            ArticleName = x.ArticleName
        });
        // Again if there are any values in query add them to existing result values
        result.AsQueryable().Union(query);
    }

    if (request.Candy.HasValue && (bool)request.Candy)
    {
        // When its candy I want also articles from food category
        query = _context.Articles.Where(x => x.Active == true && x.ArticleType == ArticleType.Food || x.ArticleType == ArticleType.Candy).Select(x => new Article
        {
            Id = x.Id,
            ArticleName = x.ArticleName
        });
        // Again if there are values in query add them to existing result 
        result.AsQueryable().Union(query);
    }
    //At the end return result and all the values in case all conditions were satisfied
    return await result.ToListAsync();
}
尝试使用result.AsQueryable.Unionquery.ToList;。这将从数据库中获取对象。到目前为止,查询包含对数据库中而不是内存中对象的引用

请尝试使用result.AsQueryable.Unionquery.ToList;。这将从数据库中获取对象。到目前为止,查询包含对数据库中而不是内存中对象的引用

若要展开,Union将把iQueryTables中的不同值合并为一个。但是,如果您只是希望合并它们,而不考虑重复的值,则可以使用Concat。若要展开,Union将把iQueryTables中的不同值合并为一个值。但是,如果您只是希望合并它们,而不考虑重复的值,则可以改用Concat。