假設我有對象,如下面:IEnumerable的<T>過濾
系統:
public class SystemDto
{
public int Id { get; set; }
public string Ip { get; set; }
public string Url { get; set; }
public RegionDto Region { get; set; }
public ApplicationDto Application { get; set; }
public bool Status { get; set; }
}
應用:
public class ApplicationDto
{
public int Id { get; set; }
public string Name { get; set; }
}
地區:
public class RegionDto
{
public string Name { get; set; }
}
現在讓我們假設我有IEnumerable<SystemDto>
我想查詢在不同的條件下,這個對象:
- 通過
RegionDto.Name
- 通過
IEnumerable<RegionDto.Name>
- 通過
IEnumerable<RegionDto.Name>
和IEnumerable<ApplicationDto.Name>
- 通過
RegionDto.Name
和IEnumerable<ApplicationDto.Name>
- 通過
RegionDto.Name
和ApplicationDto.Name
我可以寫其他條件,但我認爲你明白了我的觀點。當SystemDto
中的字段數量增加時,條件會增加。 我的問題是過濾方法應該是什麼樣子?我不認爲有一個方法具有所有參數是好主意,因爲它可能會發生,我將不得不把null
不需要的字段,然後在身體檢查是否提供。當我有一個具有20個或更多字段的對象時,它也會有很多行。
- 編輯
@Henric我認爲你的答案是什麼,我需要,但我有一個問題。我有IRepository和IService接口。我不想從數據源中提取所有記錄,並在即將使用之前對其進行過濾。如果我想在存儲庫類中對其進行過濾,但是在服務類中,我將擁有TSource = SystemDto
。我將不得不以某種方式映射TSources。這可能嗎?
這有幫助嗎? https://msdn.microsoft.com/library/bb534803(v=vs.110).aspx – Henrik
你需要一個過濾器方法嗎?你不能簡單地調用列表中的「Where」並指定當時要過濾的屬性嗎?另一種方法是編寫一個包含所有可選參數的方法,每個參數的默認值爲'null'。然後你可以在你每次打電話時提供你想要的。 – jmcilhinney