我需要做一个LINQ2DataSet查询,在多个字段上进行连接(如
var result = from x in entity
join y in entity2
on x.field1 = y.field1
and
x.field2 = y.field2
Run Code Online (Sandbox Code Playgroud)
我还找到了一个合适的解决方案(我可以在where子句中添加额外的约束,但这远不是一个合适的解决方案,或者使用这个解决方案,但假设是一个等值连接).
LINQ是否可以在单个连接中加入多个字段?
编辑
var result = from x in entity
join y in entity2
on new { x.field1, x.field2 } equals new { y.field1, y.field2 }
Run Code Online (Sandbox Code Playgroud)
我引用的解决方案是假设上面的等值连接.
进一步编辑
为了回答我最初的例子是等值的批评,我确实承认,我目前的要求是等同于我,我已经采用了上面引用的解决方案.
但是,我试图了解LINQ应该采用/应该采用的可能性和最佳实践.我很快就需要使用表ID进行日期范围查询连接,并且只是预先解决了这个问题,看起来我必须在where子句中添加日期范围.
一如既往地感谢所有建议和意见
在我所工作的每家公司,我发现人们仍然在ANSI-89标准中编写SQL查询:
select a.id, b.id, b.address_1
from person a, address b
where a.id = b.id
Run Code Online (Sandbox Code Playgroud)
而不是ANSI-92标准:
select a.id, b.id, b.address_1
from person a
inner join address b
on a.id = b.id
Run Code Online (Sandbox Code Playgroud)
对于这样一个非常简单的查询,可读性没有太大差异,但是对于大型查询,我发现将我的连接条件分组并列出表格可以更容易地查看我在连接中可能存在问题的位置,以及让我在WHERE子句中保留所有过滤功能.更不用说我觉得外连接比Oracle中的(+)语法更直观.
当我尝试向人们传播ANSI-92时,使用ANSI-92而不是ANSI-89有什么具体的性能优势吗?我会自己尝试,但是我们这里的Oracle设置不允许我们使用EXPLAIN PLAN - 不希望人们尝试优化他们的代码,是吗?
我试图在Linq的查询中加入3个表来从所有3个表中获取数据.下面是表格方案的图片:
查询应选择:SewagePlantName,CompanyName和Duty
此外,我需要将SewagePlantId限制为ID列表,其列表如下:
var sewagePlantIds = UnitOfWork.GetAll<UserGroup>()
.Where(group => group.Id == webAppPrincipal.GroupId)
.SelectMany(group => group.SewagePlantId).Select(sewageplant => sewageplant.Id).ToList();
Run Code Online (Sandbox Code Playgroud)
我加入3个表的顺序以及在何处/如何将SewagePlantId限制在给定列表中有困难.