2011-06-01 90 views
2

看起来连接不能使用查询中定义的集合,或者我做错了什么?LINQ连接范围

from a in new[] { 
    new { Id = 1 }, 
    new { Id = 2 } } 

let bees = new[] { 
    new { Id = 2 }, 
    new { Id = 3 } } 

join b in bees on a.Id equals b.Id 

select 1; 

这一个给编译时错误“元素”蜜蜂“在当前上下文中不存在”。查询有什么问题?

回答

2

这是不合法的,你分割它 - 你不能在连接的中间声明一个范围变量 - 在内部let子句被转换为匿名类型的Select()语句 - 但是你不能使用Select()在加入过程中,您必须在加入后移动它。

+0

现在我明白了,谢谢。其他谁想知道更多关于,这里是描述它的链接:http://blogs.msdn.com/b/stuartleeks/archive/2008/05/21/using-let-in-linq-to-objects.aspx – 2011-06-01 14:23:50

0

看一看这个问题 - 我觉得它涵盖的东西:

Can i use join with let in linq - c#

基本上你只能使用let进行查询,而不是连接。

以下似乎工作,但它不是很好:

from a in new[] { 
    new { Id = 1 }, 
    new { Id = 2 } } 

join b in new[] { 
    new { Id = 2 }, 
    new { Id = 3 } } on a.Id equals b.Id 

select 1; 
+0

你提出的问题涵盖了不同的问题。我没有定义let直到运行时的数组。但是,无论如何感谢:) – 2011-06-01 14:05:52