如何在linq中为两个linq结果写入union all

时间:2017-06-03 06:34:12

标签: c# linq

updateTest(testValue) {
    this.setValue(testValue)
}

我是linq的新手;请帮我如何在linq查询中使用union all来为两个变量存储结果。

在上面的代码中,我使用两个linq查询来获取结果,但我想将两个结果存储在其他变量中。请帮帮我。

4 个答案:

答案 0 :(得分:1)

Linq中的UNION ALL等效于Concat

js.Data = data11.Concat(data2);

请参阅http://theburningmonk.com/2010/02/linq-choosing-between-concat-and-union/

答案 1 :(得分:1)

当您将两个集合转换为列表时,您可以使用AddRange List of List来执行此操作。

  var data11 = (from p in db.FeePlan.Where(d => d.AcademicYearID == dts.AcademicYearID && d.Active == true && d.IsEffectiveDates == false)
                          from fb in db.FeePlansToBranches.Where(x => x.FeePlanID == p.FeePlanID && x.BranchID == BranchID)
                          from b in db.Branches.Where(b => b.BranchID == fb.BranchID)
                          from fp in db.AssignFeeplanToClasses.Where(a => a.BranchID == BranchID && a.ClassID == ClassID && a.FeePlanID == p.FeePlanID)
                          from cl in db.Classes.Where(c => c.ClassID == fp.ClassID)
                          select new
                          {
                              p.FeePlanName,
                              p.FeePlanID,
                              b.BranchName,
                              cl.ClassName,
                              fp.AssignFeeplanToClassID,
                              fp.CreatedDate
                          }).Distinct().ToList().AddRange(

            (from p in db.FeePlan.Where(d => d.AcademicYearID == dts.AcademicYearID && d.Active == true &&d.IsEffectiveDates == true)
                         from fb in db.FeePlansToBranches.Where(x => x.FeePlanID == p.FeePlanID && x.BranchID == BranchID)
                         from b in db.Branches.Where(b => b.BranchID == fb.BranchID)
                         from fp in db.AssignFeeplanToClasses.Where(a => a.BranchID == BranchID && a.ClassID == ClassID && a.FeePlanID == p.FeePlanID)
                         from cl in db.Classes.Where(c => c.ClassID == fp.ClassID)
                         where (DateTime.Now> p.StartDate && DateTime.Now < p.EndDate)
                         select new
                         {
                             p.FeePlanName,
                             p.FeePlanID,
                             cl.ClassName,
                             b.BranchName,
                             fp.AssignFeeplanToClassID,
                             fp.CreatedDate
                         }).Distinct().ToList());

答案 2 :(得分:1)

两种方式:

var data3 = data11.Concat(data2).ToList();

或者

var data3 = new List<object>(data1);
data3.AddRange(data2);

但由于您似乎不想要重复,您可能仍想使用union

var data3 = data11.Union(data2).ToList();

答案 3 :(得分:0)

 var data11 = (from p in db.FeePlan.Where(d => d.AcademicYearID == dts.AcademicYearID && d.Active == true && d.IsEffectiveDates == false)
                              from fb in db.FeePlansToBranches.Where(x => x.FeePlanID == p.FeePlanID && x.BranchID == BranchID)
                              from b in db.Branches.Where(b => b.BranchID == fb.BranchID)
                              from fp in db.AssignFeeplanToClasses.Where(a => a.BranchID == BranchID && a.ClassID == ClassID && a.FeePlanID == p.FeePlanID)
                              from cl in db.Classes.Where(c => c.ClassID == fp.ClassID)
                              select new
                              {
                                  FeePlanName = p.FeePlanName,
                                  FeePlanID = p.FeePlanID,
                                  ClassName = cl.ClassName,
                                  BranchName = b.BranchName,
                                  AssignFeeplanToClassID = fp.AssignFeeplanToClassID,
                                  CreatedDate = fp.CreatedDate
                              }).ToList();

                var data2 = (from p in db.FeePlan.Where(d => d.AcademicYearID == dts.AcademicYearID && d.Active == true && d.IsEffectiveDates == true)
                             from fb in db.FeePlansToBranches.Where(x => x.FeePlanID == p.FeePlanID && x.BranchID == BranchID)
                             from b in db.Branches.Where(b => b.BranchID == fb.BranchID)
                             from fp in db.AssignFeeplanToClasses.Where(a => a.BranchID == BranchID && a.ClassID == ClassID && a.FeePlanID == p.FeePlanID)
                             from cl in db.Classes.Where(c => c.ClassID == fp.ClassID)
                             where (DateTime.Now > p.StartDate && DateTime.Now < p.EndDate)
                             select new
                             {
                            FeePlanName=   p.FeePlanName,
                              FeePlanID=   p.FeePlanID,
                               ClassName=  cl.ClassName,
                             BranchName=    b.BranchName,
                                AssignFeeplanToClassID= fp.AssignFeeplanToClassID,
                                CreatedDate= fp.CreatedDate
                             }).ToList();

                js.Data = data11.Concat(data2);