C
我正在寻求转换为linq查询。据我所知,不到符号不能转换为Linq查询。请提出建议。我有一个字符串日期,我需要与linq进行比较。
答案 0 :(得分:0)
正如您所说,Linq在EquiJoin之外不支持其他类型的join
。 Docs非常清楚您可以做什么来绕过此问题:
在您的情况下,可能的Linq查询可能是这样的:
from f1 in firmwares
from f2 in firmwares
let f1_date = DateTime.Parse(f1.Dt)
let f2_date = DateTime.Parse(f2.Dt)
where f1.Group_Id == f2.Group_Id && f1_date < f2_date
group f1 by f1.Id into fres
select new {
Id = fres.Key,
Count = fres.Count()
};
但是,我仍然在思考如何模拟LEFT JOIN
,而不将其强制加入组联接。
答案 1 :(得分:0)
当然可以使用<
符号。只需使用方法语法而不是查询语法即可!
每个FW1
具有零个或多个FW2s
。每个FW2
恰好属于一个FW1
。使用外键firmware_group_id
来实现一对多。
显然,您希望所有FW1s
都具有其FW2s
的编号,并且它们的属性public
的值等于1,并且属性br-date
大于br-date
中FW1
的值。
每当您想要一个包含许多子项目(使用外键)的项目时,例如s学校与学生,顾客与订单,书与页面,您都需要Enumerable.GroupJoin < / p>
var result = FW1.GroupJoin(FW2, // GroupJoin FW1 and FW2
fw1 => fw1.firmware_group_id, // from fw1 take the primary key firmware_group_id
fw2 => fw2.firmware_group_id, // from fw2 take the foreing key firmware_group_id
(fw1, fw2s) => new // from every fw1, with all its matching fw2s
{ // make one new object containing the following properties:
Id = fw1.Id,
// Count the fw2s of this fw1 that have public == 1
// and a date larger than fw1.date
Count = fw2.Where(fw2 => fw2.Public == 1 && fw1.br_date < fw2.br_date)
.Count(),
});
注意: