2012-06-15 36 views
2

我有這個代碼幾行創建和傳遞的IEnumerable的方法在一行

FilterCondition CustomerID = new FilterCondition("Customer_ID",cust.Customer_ID,FilterCondition.FilterOperator.Equals); 
     List<FilterCondition> conditions = new List<FilterCondition>(); 
     conditions.Add(CustomerID); 
     conditions.Add(Location_is_last_used); 
     Location loct = Store.Select<Location>(conditions).First(); 

我試圖使它像這樣

Store.Count<Customer>(new List<FilterCondition>().Add(new FilterCondition("Customer_name",name,FilterCondition.FilterOperator.Equals)) 

工作,但是這不會工作,因爲添加的回報無效,它讓我瘋狂,有沒有其他方法可以解決這一問題?我真的不想寫我所需要的一切條件。

Tnx求助! 問候, 盧卡

回答

1

你可以寫一個擴展方法:

public static class MyExtensions 
{ 
    public static ICollection<T> AddChainable<T>(this ICollection<T> collection, T newItem) 
    { 
     collection.Add(newItem); 
     return collection; 
    } 
} 

然後,您可以調用這個如下:

Store.Count<Customer>(new List<FilterCondition>().AddChainable(new FilterCondition("Customer_name",name,FilterCondition.FilterOperator.Equals)); 

(上ICollection<T>,其中介紹了Count財產承擔Store.Count<T>作品,否則調整收集

與列表初始化程序語法相比,您可以使用此al所以對於已經創建的列表對象(例如如果你從工廠方法中獲取列表對象)。

+0

謝謝!這是我一直在尋找的,從C多年來我忘記了延長方法。你真的讓我的一天:) –

0
Store.Count<Customer>(new FilterCondition[]{new FilterCondition("Customer_name",name,FilterCondition.FilterOperator.Equals)}.ToList()) 
0

您可以使用

new List<FilterConditions>() { new FilterCondition("Customer_name",name,FilterCondition.FilterOperator.Equals) } 

的名單初始化

0

第一壁的,我不會做,導致已有的代碼好,但如果你真的想要做到這一點,其中一個可能僞代碼可能是:

Location loct = Store.Select<Location>(new List<FilterCondition>{ 
      new FilterCondition{value = CustomerID}, 
      new FilterCondition{value = Location_is_last_used} 
}).First(); 

應該適合你。

重複,在我看來,你的代碼是的方式更好。它更容易閱讀。

+0

這是什麼瘋狂的語法...? – McGarnagle

+0

@dbaseman:更正之前,我對屬性進行了修改。代碼只是一個概念。 – Tigran

相關問題