为了账号安全,请及时绑定邮箱和手机立即绑定

如何在LINQ中对单个联接中的多个字段进行联接

如何在LINQ中对单个联接中的多个字段进行联接

C#
繁花不似锦 2019-07-22 19:08:47
如何在LINQ中对单个联接中的多个字段进行联接我需要对多个字段执行一个连接的LINQ2DataSet查询(如var result = from x in entity join y in entity2         on x.field1 = y.field1  and            x.field2 = y.field2我还没有找到一个合适的解决方案(我可以在WHERE子句中添加额外的约束,但这远远不是一个合适的解决方案,或者使用这,这个解决方案,但这假定为等量连接)。在LINQ中可以在单个联接中连接多个字段吗?编辑var result = from x in entity              join y in entity2              on new { x.field1, x.field2 } equals new { y.field1, y.field2 }是我所引用的解决方案,假设上面有一个等量连接。进一步编辑为了回答关于我最初的例子是一个相等的批评,我承认,我目前的要求是平衡连接,我已经采用了我上面提到的解决方案。然而,我正在努力理解我在LINQ中使用的可能性和最佳实践。我很快就需要用一个表ID连接一个日期范围查询,并且只是抢占了这个问题,看来我必须在WHERE子句中添加日期范围。一如既往地感谢大家的建议和意见。
查看完整描述

3 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

匿名类型的解决方案应该可以正常工作。林克能,会,可以只表示等距连接(无论如何,使用联接子句),实际上,这就是您说过的基于原始查询想要表达的内容。

如果由于某些特定原因而不喜欢匿名类型的版本,则应该解释这个原因。

如果你想做的事情不是你最初要求的,请举一个例子来说明你真的想做什么。

编辑:回答问题中的编辑:是的,要执行“日期范围”连接,您需要使用WHERE子句。它们在语义上是等价的,所以这只是一个可用的优化问题。Equijoin通过创建基于内部序列的查找来提供简单的优化(在LINQto对象中,其中包括LINQto数据集)-把它看作是一个从键到匹配键的条目序列的哈希表。

在日期范围内这样做有点困难。然而,取决于您所说的“日期范围连接”的确切含义,您可能可以做一些事情。相似-如果您计划创建日期的“乐队”(例如,每年一个),以便在同一年(但不是在同一日期)出现的两个条目应该匹配,那么您可以使用该乐队作为关键。如果它更复杂,例如,连接的一侧提供了一个范围,而连接的另一端提供了一个单一日期,如果它在该范围内进行匹配,则最好使用where从句(在第二句之后)from(条款)海事组织。你可以做一些特别古怪的魔术,命令一方或另一方更有效地找到匹配,但这将是很多工作-我只会做这种事情后,检查性能是否是一个问题。


查看完整回答
反对 回复 2019-07-22
?
噜噜哒

TA贡献1784条经验 获得超7个赞

var result = from x in entity
   join y in entity2 on new { x.field1, x.field2 } equals new { y.field1, y.field2 }



查看完整回答
反对 回复 2019-07-22
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

var result = from x in entity1
             join y in entity2
             on new { X1= x.field1, X2= x.field2 } equals new { X1=y.field1, X2= y.field2 }

如果列名在两个实体中不同,则需要这样做。


查看完整回答
反对 回复 2019-07-22
  • 3 回答
  • 0 关注
  • 749 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信