2010-09-28 27 views
2

我使用ADO.NET實體框架與幾個數據訪問層方法返回相同的域實體。讓它成爲:EF:我可以爲lambda類轉換實例嗎?

PersonEntity GetById(int id) { 
    return db.Person.FirstOrDefault(x => new PersonEntity { Id = x.Id, Name = x.Name }); 
} 

IQueryable<PersonEntity> GetByName(string name) { 
    return db.Person.Where(x => x.Name == name).Select(x => new PersonEntity { Id = x.Id, Name = x.Name }); 
} 

e.t.c.:

class PersonEntity { 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

和方法,根據不同的標準返回Person實體代碼塊x => new PersonEntity { Id = x.Id, Name = x.Name }非常重複性(這是非常惱人的許多場實體),但我不能把它的單點,例如靜態方法:

PersonEntity ConvertToPersonEntity(Person x) { 
    return new PersonEntity { Id = x.Id, Name = x.Name } 
} 

這樣的外部函數調用不能轉換成SQL運營商。有沒有什麼解決方法可以將轉換保留在一個地方?

預先感謝您!

+0

使用非實體類型可能會編譯失敗。然而,你可以創建一個返回匿名對象初始化表達式的方法,但是如果從編譯器的角度來看,這是完全可能的。 – leppie 2010-09-28 11:25:37

回答

3

是的,你可以這樣做:

Expression<Func<Person, PersonEntity>> ConvertToPersonEntity() { 
    return x => new PersonEntity { Id = x.Id, Name = x.Name }; 
} 

...然後:

PersonEntity GetById(int id) { 
    var exp = ConvertToPersonEntity(); 
    return db.Person.FirstOrDefault(exp); 
} 
+0

謝謝您的回覆,我明天再檢查!如果作品會很棒! – 2010-09-28 12:57:57

相關問題