我是LinQ的新手,在执行Linq语句时遇到了一些问题。以下是相同的摘要。
我有两个具有相同类类型的类对象,例如:Report r1,Report r2,其值包含month,ID,values。两个对象的值都不同。例如:
List<Report> r1 = new List<Report>();
List<Report> r2 = new List<Report>();
r1.Add(new Report { month = 1, ID = 1, a = 5, b = 12 });
r1.Add(new Report { month = 1, ID = 2, a = 6, b = 13 });
r1.Add(new Report { month = 2, ID = 1, a = 6, b = 14 });
r1.Add(new Report { month = 2, ID = 2, a = 8, b = 15 });
r1.Add(new Report { month = 3, ID = 2, a = 9, b = 16 });
r2.Add(new Report { month = 1, ID = 1, a = 5, b = 22 });
r2.Add(new Report { month = 1, ID = 2, a = 6, b = 23 });
r2.Add(new Report { month = 2, ID = 1, a = 6, b = 24 });
var delreport =
from rr1 in r1
join rr2 in r2 on new { rr1.month, rr1.ID }
equals new { rr2.month, rr2.ID } into result
select result;
但是,我得到了空白的结果集。我希望r2数据(a,b值)与r1的月和 id 以及r1数据(a,b值)匹配。 希望,我的问题很明确,请求你的帮助。
答案 0 :(得分:1)
我相信这就是你要找的东西
var innerJoin =
from rr1 in r1
join rr2 in r2 on new {rr1.Month, rr1.ID} equals new {rr2.Month, rr2.ID}
select new { R1 = rr1, R2 = rr2 };
新的匿名对象可以是任何类型,并且可以访问可用于要连接的两个集合的任何属性。
对于左外连接,这是如何完成的
var leftJoin =
from rr1 in r1
join rr2 in r2 on new {rr1.Month, rr1.ID} equals new {rr2.Month, rr2.ID} into ps
from rr2 in ps.DefaultIfEmpty()
select new { R1 = rr1, R2 = rr2 };
答案 1 :(得分:-1)
这是您的查询的链版本。
var delreport= r1.Join(r2, l => l.ID, r => r.ID, (l, r) => new { lft = l, rght = r })
.Where(x => x.lft.month == x.rght.month)
.Select(_ => new{ _.rght.ID, _.rght.month}).ToList();
经过测试并可以处理您的数据。
答案 2 :(得分:-1)
如果你想加入两个表,同一列的fkid相同,那么在代码二之后使用,加入表和访问以获得所需的结果,否则忽略。
db 之后是数据库实体对象。
注意:在您的代码中,您加入了不同的实体月份,并且ID在数据上有所不同,导致您在代码后使用空结果
var v = (from a in db.r1.ToList()
join b in db.r2.ToList() on a.Month equals b.ID
select new
{
Id = a.ID,
month = b.Month // or a.Month as you want,
values = a.values
});
通过使用这些,您可以访问两个表值并获得接受的结果。谢谢你是否可以使用它。