有没有一种更有效的方法来在Sql server中找到dupes

时间:2010-12-15 21:12:45

标签: c# linq-to-sql .net-3.5 linq-to-objects

我有question,我提供了 解决方案。但是,我觉得这样的效率并不高:

using (DataContext context = new DataContext(SqlConnection)
{
    var custInfo = context.GetTable<tbl_CustomerInfo>();

    string compID = ImportCust.Rows[0]["CompanyID"].ToString();

    var imports = from cust in ImportCust.AsEnumerable()
                  select cust.Field<int>("CustomerID");

    var dupes = from import in imports
                join cust in custInfo
                on import equals cust.CustomerID 
                where cust.CompanyID== pivnum
                select cust;

    var records = dupes.GetEnumerator();

    while (records.MoveNext())
    { custInfo.DeleteOnSubmit(records.Current); }

    context.SubmitChanges();
}

我已使用Stopwatch查看从records到完成SubmitChanges的迭代所经过的时间。经过的时间似乎没有押韵或理由:

10666条记录在20秒内完成 15425条记录在12秒内完成
在21秒内完成289条记录

显然,如果我放弃索引,有一件事可以加快速度。可以通过编程方式完成吗?另外,有没有比我提供的更好的方法?

2 个答案:

答案 0 :(得分:3)

你可以使用SQL语句:

-- TSQL (SQL Server 2005/2008): --

select CompanyID from tbl_CustomerInfo
    group by CompanyID
    having COUNT(*)>1

答案 1 :(得分:2)

Tefod sql的linq版本:

from ci in dc.tbl_CustomerInfo
group ci by ci.CompanyID into g
where g.Count() > 1
select g.Key