解决方案 »

  1.   

    补充2:运行问题2的时候,最后是写“select c”,所以程序没报错,但这没有实现我得目标
      

  2.   

    你的代码有N多错误,简直不忍直视
    还有,你这写的是leftjoin, 不是rigthjoin
    剩下就是基本的语法错误了 ,我就不说了,你自己看代码吧。。   IEnumerable<DataRow> result =
                    from c in dt2.AsEnumerable()
                    where c.Field(3) != null && c.Field(4) != null
                    join p in dt1.AsEnumerable()
                    on new { ID = c.Field(3), NAME = c.Field(4), ACCOUNT = c.Field(5), DATE = c.Field(6), AMOUNT = c.Field(7) }
                        equals new { ID = p.Field(5), NAME = p.Field(6), ACCOUNT = p.Field(7), DATE = p.Field(8), AMOUNT = p.Field(9) }
                    into rightjoin
                    from n in rightjoin.DefaultIfEmpty() 
                    select new{ID=c.Field(3),Name=n==null?"":n.Field(6)};
      

  3.   

    var  result =
                    from c in dt2.AsEnumerable()
                    where c.Field(3) != null && c.Field(4) != null
                    join p in dt1.AsEnumerable()
                    on new { ID = c.Field(3), NAME = c.Field(4), ACCOUNT = c.Field(5), DATE = c.Field(6), AMOUNT = c.Field(7) }
                        equals new { ID = p.Field(5), NAME = p.Field(6), ACCOUNT = p.Field(7), DATE = p.Field(8), AMOUNT = p.Field(9) }
                    into rightjoin
                    from n in rightjoin.DefaultIfEmpty() 
                    select new{ID=c.Field(3),Name=n==null?"":n.Field(6)};
      

  4.   

    感谢版主指教,小弟也是在别的人建议下突击学起LINQ,看来问题很严重。
    另外追问2个问题:
    1.您所写的“c.Field(3)",正确的写法是不是应该写成c.Field<int>("3")
    2.最后一句select new{ID=c.Field(3),Name=n==null?"":n.Field(6)};有点看不懂,能讲解一下吗?呃如果想选全部字段要怎么写?除了逐一写出还有别的办法吗?
    谢谢啦!
      

  5.   

    补充:c.Field(3)写进去系统报错,摸索了一下,写成c.Field<int>("3")后系统没报错了,不知道对不对
      

  6.   

    c.Field(3)写成 c.Field<int>("ID")  字段名也是可以的Name=n==null?"":n.Field(6) 这句意思是:
    因为你的查询是leftjoin,所以右表n的数据可能为空
      

  7.   

    我的数据表是EXCEL导入的,所以字段名都是汉字,有点很长,还有的有换行,挺复杂的,所以...
    然后我按您的建议修改了代码,系统在  "":n.Field<int>(“6”)  下面标记错误 “无法确定表达式类型,因为string和int之间没有隐式转换”,n.Field<int>(“6”)  不对了?
      

  8.   

    select new{ID=c.Field(3),Name=n==null?"":n.Field(6)}; 还是没办法实现,一直报错,诸如“无效的匿名类型成员声明符”、“无法将<null>赋予匿名类型属性”等等。因为2表关联,如果没能选取关联之后的表的字段,无法进行下一步筛选,所以还请高人指点如何选取关联表全部字段。感激不尽!