【问题标题】:how to inner join DataTables using labda expression linq in C#?如何在 C# 中使用 lambda 表达式 linq 内部连接 ​​DataTables?
【发布时间】:2017-05-04 07:40:33
【问题描述】:

我已经使用“查询语法”加入了数据表,它工作正常。任何人都可以帮助将其转换为 Lamba 语句吗?

 var oVarLoanDetails = (from data in ActiveReferralDetails.AsEnumerable()
    join reftypedata in ActionType.AsEnumerable()
    on data.Field<int>("atid") equals reftypedata.Field<int>("atid")
    join refsubtypedata in ActionSubType.AsEnumerable()
    on data.Field<int>("ASTID") equals refsubtypedata.Field<int>("ASTID")
    where reftypedata.Field<int>("atid") == refsubtypedata.Field<int>("atid")
     select new LoanDataInfo
             {
            LoanNumber = data.Field<string>("Loanno").ToLower(),
            ATID = reftypedata.Field<int>("atid"),
            RefType = reftypedata.Field<string>("ATSHORTDESC"),
            RefSubType = refsubtypedata.Field<string>("SUBTYPESHORTDESC")
             });
        //Class LoanDataInfo

        public class LoanDataInfo
            {
                public string LoanNumber { get; set; }
                public int ATID { get; set; }
                public string RefType { get; set; }
                public string RefSubType { get; set; }
            }

【问题讨论】:

  • 为什么要这样做?使用带有连接的方法语法是如此丑陋,我不记得我必须通过什么,难怪你需要问。你总是可以混合使用两种语法来避免它。
  • 是的,即使我同意 lamda 连接是丑陋的。我只是想尝试在数据表中编写 lamda joins....
  • 没有任何好处

标签: c# linq linq-to-dataset


【解决方案1】:

编辑:

请参阅Queryable.Join Method (IQueryable, IEnumerable, Expression>, Expression>, Expression>)

您的查询的 lambda 版本可能是这样的。

请注意,对于某些属性,我只是假设它来自 ActiveReferralDetails。

var oVarLoanDetails = ActiveReferralDetails.AsEnumerable()
    .Join(ActionType.AsEnumerable(), 
    ard => arc.Field<int>("atid"), 
    at => at.Field<int>("atid"), 
    (ard, at) => new { ARD = ard, AT = at })
    .Join(ActionSubType.AsEnumerable(), 
    r => new { astid = r.ARD.Field<int>("ASTID"), 
    atid = r.ARD.Field<int>("atid") }, 
    ast => new { astid = ast.Field<int>("ASTID"), 
    atid = ast.Field<int>("atid") },
    (r, ast) => new { ARD = r.ARD, AT = r.AT, AST = ast})
    .Select(r => new LoanDataInfo() {
        LoanNumber = r.ARD.Field<string>("Loanno").ToLower(),
        ATID = r.ARD.Field<int>("atid"),
        RefType = r.ARD.Field<string>("ATSHORTDESC"),
        RefSubType = r.ARD.Field<string>("SUBTYPESHORTDESC")
    });

Lambda 连接很难看。我不建议使用它。

【讨论】:

  • 我希望您将“ActiveReferralDetails”视为一个类,但它是一个数据表。
  • @DineshRamaian 只需相应地应用更改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多