组合两组相同的实体

时间:2018-02-05 14:56:43

标签: c# entity-framework linq

我有这门课程

public class Subject
{
    [Required]
    public int Id { get; set; }

    public string SubjectName { get; set; }

    public string Technology { get; set; }
}

我有两个查询来从该类中选择数据 查询A

var subjectA = _dbContext.Subjects
                .Where(x => x.Technology == "Tech A")
                .Take(10)
                .ToList();

查询B

var subjectB = _dbContext.Subjects
                .Where(x => x.Technology == "Tech B")
                .Take(10)
                .ToList();

我需要将这两个实体合并为一个实体列表 但是,我无法找到任何这样做的例子。

  

编辑:我需要每个人10个。

4 个答案:

答案 0 :(得分:4)

你需要前10个或10个,不管是什么?

可能是:

_dbContext.Subjects
  .Where(x => x.Technology == "Tech A")
  .Take(10)
  .Union(_dbContext.Subjects
          .Where(x => x.Technology == "Tech B")
          .Take(10))
  .ToList();

或者:

_dbContext.Subjects
  .Where(x => x.Technology == "Tech A" || x.Technology == "Tech B")
  .Take(10) // Or 20
  .ToList();

答案 1 :(得分:4)

如果您有两个项目列表,并且希望将它们合并为一个列表,则可以使用Enumerable.Concat< T>(this IEnumerable< T>, IEnumerable< T>)扩展方法。

var bothSubjects = subjectA.Concat(subjectB);

答案 2 :(得分:3)

您需要在 中包含10个OR运算符||

var subjectAB = _dbContext.Subjects
                .Where(x => x.Technology == "Tech A" || x.Technology == "Tech B")
                .Take(10)
                .ToList();

如果您想要每个 10,请使用.Concat

var subjectAB = _dbContext.Subjects
    .Where(x => x.Technology == "Tech A")
    .Take(10)
    .Concat(_dbContext.Subjects
        .Where(x.Technology == "Tech B")
        .Take(10))
    .ToList();

Concat加入这两个序列而不尝试删除Union所做的重复工作。

答案 3 :(得分:0)

如果我理解你的问题,我不是百分百肯定的 但是如果你想做一个单一的查询来获得这两种技术,你可以这么做:

var subjects = _dbContext.Subjects
                .Where(x => x.Technology == "Tech A" || x.Technology == "Tech B")
                .Take(10)
                .ToList();

虽然我强烈建议您按照他们的ID选择技术,而不是他们的字符串名称。

For example: .where(x => x.TechnologyId == 1 (Number of your id)

var subjects = _dbContext.Subjects
                    .Where(x => x.TechnologyId == 1 || x.TechnologyId == 2
                    .Take(10)
                    .ToList();

您还可以查询主题A,然后查询主题B并将它们两者相加。这取决于您的要求。但如果您只需要两者,请使用第一个查询。