【问题标题】:Join anonymous type in LINQ在 LINQ 中加入匿名类型
【发布时间】:2012-05-04 20:41:59
【问题描述】:

我确实有 2 个 c# 声明表,它在程序创建过程中初始化。

我想根据它的 UserID 和 UserName 加入这个表。

我的代码如下

from nSJL in UserList.AsEnumerable()
join SJL in UserListOnline.AsEnumerable()
on
new { nSJL.Field<int>("UserID"), nSJL.Field<string>("UserName") }
equals
new { nSJL.Field<int>("UserID"), nSJL.Field<string>("UserName") }
into sjList

在这段代码中我得到了错误

匿名类型成员声明器无效。必须使用成员分配、简单名称或成员访问来声明匿名类型成员。

无论如何要加入匿名类型?

【问题讨论】:

    标签: c# .net linq join


    【解决方案1】:

    您需要指定匿名类型属性的名称:

    from nSJL in UserList.AsEnumerable()
    join SJL in UserListOnline.AsEnumerable()
    on
    new { UserID = nSJL.Field<int>("UserID"),
          UserName = nSJL.Field<string>("UserName") }
    equals
    new { UserId = SJL.Field<int>("UserID"),
          UserName = SJL.Field<string>("UserName") }
    into sjList
    

    请注意,我还将连接的右侧更改为使用SJL 而不是nSJL,否则它是无效的。如果您使用更有意义的名称,这将有助于您的代码清晰......

    【讨论】:

      【解决方案2】:
      from nSJL in UserList.AsEnumerable()
      join SJL in UserListOnline.AsEnumerable()
      on
      new{  UserID = nSJL.Field<int>("UserID"), UserName = nSJL.Field<string>("UserName") }
      equals
      new { UserID = nSJL.Field<int>("UserID"), UserName = nSJL.Field<string>("UserName") } into sjList
      

      您没有为匿名类型声明字段名称。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-07
        • 2012-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多