如何在单个var结果中组合这两个LINQ查询

时间:2017-01-28 16:01:06

标签: c# linq

这是我的代码。我想在单个var结果中组合这2个LINQ查询。我使用这些技术:

var result = queryOne.Union(queryTwo);
var result = queryOne.Concat(queryTwo);
var result = Enumerable.Union(queryOne, queryTwo);

这不起作用。怎么做对了?我是LINQ和C#的新成员。

var queryOne = await (from x in _context.DwPropertyMasters
                                  where
                                  x.LandId == 2
                                  select new
                                  {
                                      x.LandId,
                                      x.MapPointX,
                                      x.MapPointY,
                                      x.Location,
                                      a = x.Development == null || x.Development == "" ? x.Location : x.Development,
                                      AreaSize = x.AreaSize ?? 0,
                                      Premium = x.Premium ?? 0,
                                      b = (((x.Premium == 0 ? null : x.Premium) * 100000000) / (x.AreaSize == 0 ? null : x.AreaSize)) ?? 0,
                                      x.Developer,
                                      x.YearTender,
                                      c = x.Development ?? x.Location,
                                      AreaSize2 = x.AreaSize2 ?? 0,
                                      d = (((x.Premium == 0 ? null : x.Premium) * 100000000) / (x.AreaSize2 == 0 ? null : x.AreaSize2)) ?? 0,
                                  }).ToArrayAsync();

            var queryTwo = await (from y in _context.DwPropertyDetails
                                  where
                                  y.LandId == 2
                                  orderby
                                  y.Block,
                                  y.Asp descending
                                  select new
                                  {
                                      y.LandDetailId,
                                      y.LandId,
                                      a = y.Pasp ?? "",
                                      b = y.Asp ?? "",
                                      c = y.Tasp ?? "",
                                      y.Block,
                                      y.Floor,
                                      y.Unit,
                                      d = y.CarParking ?? "",
                                      y.SalePrice,
                                      e = y.Revision ?? "",
                                      y.VendorRelate,
                                      y.TransactionPrice,
                                      y.FlatType,
                                      y.ActualSize,
                                      f =
                                      ((y.TransactionPrice == 0 ? null : y.TransactionPrice) / (y.ActualSize == 0 ? null : y.ActualSize)) ??
                                      0
                                  }).ToArrayAsync();

            var singleQuery = queryOne.Union(queryTwo);



 var result = queryOne.Union(queryTwo);
    var result = queryOne.Concat(queryTwo);
    var result = Enumerable.Union(queryOne, queryTwo);

这不起作用。怎么做对了?我是LINQ和C#的新成员。

2 个答案:

答案 0 :(得分:1)

你的第一个LINQ返回的枚举数与第二个不同,并且你无法连接这两个对象。他们必须返回相同类型的对象。

p + geom_point(data = dat, aes(x = A, y = B))

您必须为相同的顺序和类型使用相同数量的属性,或者您可以为其定义自定义类。

答案 1 :(得分:0)

你的问题现在缺乏背景,但是因为你不能结合2 IEnumerable<T>的唯一原因是因为它们的类型不同。

如果您在2个地方使用匿名类型,那么将这个匿名类型放入其自己的课程中,这样您应该能够.Concat 2个结果。

但是你可以在2种查询类型中看到一些明显的差异。另一种选择是创建第三种类型,其接受包含其他2个查询的所有成员。