我有这门课程
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个。
答案 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并将它们两者相加。这取决于您的要求。但如果您只需要两者,请使用第一个查询。