2015-10-05 91 views
1

这对于c#来说等价的代码是什么?将Linq查询从vb.net转换为c#

VB代码

下面是什么,我想,但它是相当错误的。

var q = (from p in commDs.Tables[1].AsEnumerable() 
        join e in ds.Tables[1].AsEnumerable() on 
        p.Field<int>("JobID") equals e.Field<int>("JobID") 
        && e.Field<int>("EventID") equals p.Field<int>("EventID") 
     Select new{ p,e} 
     ); 
+1

你可以试试这个工具:http://converter.telerik.com/ –

+1

试过了,但是转换器返回EOF错误。 – user2058252

回答

1

我没有意识到VB会让你加入像这样的多个值。在C#中相当于将创建连接密钥的匿名类型:

var q = (from p in commDs.Tables[1].AsEnumerable() 
        join e in ds.Tables[1].AsEnumerable() 
        on new {JobID = p.Field<int>("JobID"), EventID = p.Field<int>("EventID") } 
         equals new {JobID = e.Field<int>("JobID"), EventID = e.Field<int>("EventID") } 
     select new {p,e} 
     ); 

其他唯一的区别是,所产生的匿名类型有不同的字段名(peresRoweRow)但这很容易改变。

+0

我有点困惑,试过你的代码,但编译器说名字'e'不在'等于'左边的范围。 – user2058252

+0

@ user2058252再试一次;我有两个引用'p'和'e'翻转(特别是在连接子句中) –

+0

酷似乎现在很好,现在相当惊讶,我现在明白我的错误。 – user2058252