我們決定在最近的項目中使用Linq To SQL作爲我們的數據層。我們有一個功能性的解決方案,迄今爲止我們已經處理了所有的問題,並帶來了一個主要問題。我們必須一遍又一遍地編寫相同的方法來從數據庫中檢索稍微不同的結果集。將Linq轉換爲SQL DRY
舉個例子:
public List<TeamBE> GetTeamsBySolutionID(Guid SolutionID)
{
List<TeamBE> teams = new List<TeamBE>();
Esadmin db = new Esadmin(_connectionString);
var qry = (from teamsTable in db.Teams
join solutionsTable in db.Solutions on teamsTable.SolutionID equals solutionsTable.SolutionID
where teamsTable.SolutionID == SolutionID
select new { teamsTable, solutionsTable.SolutionName });
foreach (var result in qry)
{
TeamBE team = new TeamBE();
team.TeamID = result.teamsTable.TeamID;
team.Description = result.teamsTable.Description;
team.Status = result.teamsTable.Status;
team.LastModified = result.teamsTable.LastModified;
team.SolutionID = result.teamsTable.SolutionID;
team.SolutionName = result.SolutionName;
team.Name = result.teamsTable.Name;
team.LocationLevel = result.teamsTable.LocationLevel;
team.AORDriven = result.teamsTable.AoRDriven;
team.CriteriaID = result.teamsTable.CriteriaID ?? Guid.Empty;
teams.Add(team);
}
return teams;
}
public TeamBE GetTeamByID(Guid TeamID)
{
Esadmin db = new Esadmin(_connectionString);
TeamBE team = new TeamBE();
var qry = (from teamsTable in db.Teams
join solutionsTable in db.Solutions on teamsTable.SolutionID equals solutionsTable.SolutionID
where teamsTable.TeamID == TeamID
select new { teamsTable, solutionsTable.SolutionName }).Single();
team.TeamID = qry.teamsTable.TeamID;
team.Description = qry.teamsTable.Description;
team.Status = qry.teamsTable.Status;
team.LastModified = qry.teamsTable.LastModified;
team.SolutionID = qry.teamsTable.SolutionID;
team.SolutionName = qry.SolutionName;
team.Name = qry.teamsTable.Name;
team.LocationLevel = qry.teamsTable.LocationLevel;
team.AORDriven = qry.teamsTable.AoRDriven;
team.CriteriaID = qry.teamsTable.CriteriaID ?? Guid.Empty;
return team;
}
和和廣告nauseum。
有沒有辦法將Linq結果作爲參數傳遞給一個函數,所以我可以將我的對象映射放在一個函數中,而不是重複自己這麼多?
這正是我期待做的,但是如何在SQL金屬沒有產生與之相匹配的情況下創建顯式類型。 – 2009-05-18 17:58:33
只需爲您擁有的兩個部分創建一個具有公共屬性的類。當你創建對象時,使用帶有屬性初始值設定項的默認構造函數(不要把這些屬性作爲構造函數參數,否則表達式不能映射到IQueryable) – 2009-05-18 18:03:52
我希望看到這個動作,你知道任何資源或教程在這種事情? – 2009-05-18 18:09:04