2011-10-12 42 views
0

我希望能夠通過查找它與我從數據庫中找回的對象列表中的匹配來刷新對象。我可以用反射來做 - 但肯定必須有一種方法來在Where子句中獲取Property Selector。Where子句使用lambda屬性選擇器

這是那種我要打電話的事...

MyObject = GetRefreshedObject(MyObject, RefreshedObjects,() => ID); 

但我有點堅持的方法!

public static TE GetRefreshed<TE, P>(TE entity, IEnumerable<TE> refreshed, Expression<Func<TE, P>> selector) where TE : class 
    { 
     if (entity == null) return null; 

     return refreshed.Where(x => x.[Selector == entity.Selector]).FirstOfDefault(); 

     //The square bracket bits obviously don't work but hopefully show what I'm trying to achieve! 

    } 
+0

你必須選擇適用的對象,就像選擇(x)或諸如此類。 – bzlm

+1

請不要用「c#Lambda」之類的東西加前綴。這就是標籤的用途。 –

回答

3

如果你只是用lambda表達式和IEnumerables工作,你真的需要表達解析?本地使用lambda。這將需要一個細微的變化,以您的調用代碼:

var refreshedObject = GetRefreshedObject(MyObject, RefreshedObjects, x => x.ID); 

該方法的具體實現是:

public static TE GetRefreshed<TE, P>(TE entity, IEnumerable<TE> refreshed, Func<TE, P> selector) 
{ 
    P myObjectId = selector(entity); 
    return refreshed.FirstOrDefault(refresh => selector(refresh).Equals(myObjectId)); 
} 
+0

完美,謝謝 –