【问题标题】:Is there any alternative for iterating through two different datatables which have 50K of records to iterate是否有任何替代方法可以迭代两个不同的数据表,这些数据表有​​ 50K 的记录要迭代
【发布时间】:2017-03-09 09:34:21
【问题描述】:
foreach (DataRow dr in dtt.Rows)
{
    foreach (DataRow dr2 in d.Rows)
    {
        if (dr2["Nme"].ToString().Equals(dr["CompanyName"].ToString()) && dr2["Executivename"].ToString().Equals(dr["Executivename"].ToString()))
        {
            ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('This Data is alreay exist!');", true);
        }
    }
}

【问题讨论】:

  • 提供更多详细信息,您可以使用 sql 中的连接来完成
  • 是的。不。无论您想做什么,不要将 50K 行拉到客户端来做您想做的任何事情。编写 SQL 查询。您发布的是一个简单的 JOIN 并检查是否相等。为什么您需要将所有这些都拉到客户端? SELECT COUNT(*) FROM table1 inner join table2 on table1.CompanyName=table2.Nme and table1.ExecutiveName=table2.ExecutiveName
  • 是的。但是我有两个不同的 DB .. 那么我该如何加入呢?我想检查 CompanyName 和 ExecutiveName 在两个表中是否有匹配记录

标签: asp.net sql-server c#-4.0


【解决方案1】:

最好的选择是通过 sql 在您的数据库中执行此操作。例如使用JOINEXISTS 查询。如果这不可能,您可以使用这个高效且可读的 LINQ 查询:

var compData1 = dtt.AsEnumerable().Select(r => new { CompanyName = r.Field<string>("CompanyName"),Executivename = r.Field<string>("Executivename")});
var compData2 = d.AsEnumerable().Select(r => new { CompanyName = r.Field<string>("Nme"), Executivename = r.Field<string>("Executivename") });

bool alreadyExists = compData1.Intersect(compData2).Any();

if(alreadyExists)
    ClientScript.RegisterStartupScript(this.GetType(), "myalert", "alert('This Data is alreay exist!');", true);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多