在主數據庫中刪除重複的行我的數據庫中有一些重複的值,所以我使用Linq to Entity以下面的代碼刪除它們。問題是在RosterSummaryData_Subject_Local
中有一個自動編號主鍵,這會使行無效var distinctRows = allRows.Distinct();
因此,即使所有行都相同,但由於pk不同,所以不同行將不起作用。無論如何可以詆譭獨特的pk?或者無論如何,從查詢中刪除它,所以它成爲一個問題。只是爲了說明我希望查詢返回實體類型的IQueryable,因此我可以在物體上使用RemoveRange()
方法來刪除重複項。使用Distinct()
var allRows = (from subjLocal in customerContext.RosterSummaryData_Subject_Local
select subjLocal);
var distinctRows = allRows.Distinct();
if (allRows.Count() == distinctRows.Count())
{
return;
}
else
{
var rowsToDelete = allRows.Where(a => a != distinctRows);
customerContext.RosterSummaryData_Subject_Local.RemoveRange(rowsToDelete);
}
編輯
我意識到,正確帶回不同行,我所要做的就是選擇除主鍵中的所有項目:
var distinctRows = allRows
.Select(a => new {a.fkRosterSetID, a.fkTestInstanceID, a.fkTestTypeID,
a.fkSchoolYearID, a.fkRosterTypeID, a.fkDistrictID,
a.fkSchoolID, a.fkGradeID, a.fkDepartmentID,
a.fkCourseID, a.fkPeriodID, a.fkDemoCommonCodeID,
a.fkDemoCommonCategoryID, a.fkTest_SubjectID})
.Distinct();
的問題是,我無法使用下面的代碼獲取重複行,因爲!運算符不適用於匿名類型(變量distinctRows是匿名類型,因爲我沒有選擇所有列):
var rowsToDelete = allRows.Where(a => a != distinctRows);
任何幫助?
你需要在LINQ中寫這個的任何理由?在直接SQL中非常簡單。 – dbugger 2014-11-24 02:17:52
@dbugger這個腳本需要在我的程序中多次出現。我會用一點通用的ADO.NET來完成它嗎? – frontin 2014-11-24 02:28:03
是的。 SQL字符串。 cmd.Execute,去你的一天。無需與EF戰鬥。 – dbugger 2014-11-24 02:30:08