【问题标题】:lambda inner join and select alllambda 内连接并全选
【发布时间】:2013-05-28 02:17:21
【问题描述】:

这是我在 lambda 中 inner join 的方式,

var myObject = tableNames.Join(tableSchool,  x => x.sID , s => s.schoolID ,  
( (x,s) => new {   }  ) ).ToList();

我在tableNamestableSchool 都有很多字段。
通过我的 lambda 查询,如果我在 tableNames 中有 10 个字段,我必须在 new { } 中写下所有 10 个字段 10 次。
我想知道的是如何选择tableName表的所有字段和tableSchool中的一个字段。

例子

tableName     tableSchool
---------     ------------ 
Nfield1       Sfield1
Nfield2       Sfield2
Nfield3       Sfield3
Nfield4
Nfield5

我想从 tableName 获取所有字段,从 tableShcool 获取一个字段 (Sfield1)。我想将此数据源绑定到 asp:GridView :)

【问题讨论】:

  • (x,s) => new { x, s }?
  • @Oded 他似乎不想输入所有字段。
  • 这很好用,除非他想要一个平面对象,其中 x 和 s 的所有属性都可以直接访问。
  • 我已经编辑了我的问题 :)

标签: c# asp.net linq lambda selectall


【解决方案1】:

如果您想要两个表的详细信息,那么您可以:

List<AllDetails> myObject = tableNames.Join(tableSchool, x => x.sID, s => s.schoolID, ((x, s) => new AllDetails(x, s))).ToList();

地点:

public class AllDetails
    {
        private TableName tabName;
        private TableSchool tabSchool;

        public AllDetails(TableName tableName, TableSchool tableSchool)
        {
            //Assign fields here
        }
}

【讨论】:

    【解决方案2】:

    只是稍微扩展一下 Oded 的评论。您可以通过以下方式在 select 语句中创建一个新的匿名类型:

    (x, s) => new { x,s }
    

    您还可以通过以下方式指定匿名类型中项目的名称:

    (x, s) => new { TableName=x,TableSchool=s }
    

    但是,如果您需要在方法范围之外使用它,则需要使用 aquaraga 建议的新类。

    【讨论】:

    • 我想把它绑定到asp.net GridView数据源。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    相关资源
    最近更新 更多