我有一個Foo
類型的對象的列表,以及Foo
類型的對象的另一個實例。我想用linq來根據實例的非null屬性過濾列表。Linq:基於類型A的對象的類型A的過濾器列表?
class Foo {
public int ID;
public string Description;
public long Location;
}
Foo fooFilter = new Foo() {
ID = null,
Description = null,
Location = 1
}
List<Foo> fooList = new List<Foo>();
fooList.Add(new Foo(){ID = 1, Description = "one", Location = 1});
fooList.Add(new Foo(){ID = 2, Description = "two", Location = 0});
fooList.Add(new Foo(){ID = 3, Description = "three", Location = 1});
List<Foo> filteredFooList = fooList.Where(???);
我想以某種方式使用fooFilter
查詢fooList
,並填寫filteredFooList
:
[
{ID = 1, Description = "one", Location = 1},
{ID = 3, Description = "three", Location = 1}
]
編輯:
我想簡短使問題更加清晰,但我可能留下了重要的信息。在我的實際程序中,List<Foo>
是一個來自數據庫的大型結果(超過40k條目)。我試圖製作一個控制器方法(MVC),它可以採用任何與實體框架對象的字段名稱相匹配的參數組合。所以<Foo>
是EF記錄類型。所以我想,以避免明確列出所有可以在控制器中過濾的(15個左右)字段:
public class Home : Controller
{
public ActionResult FilteredFooList(int ID, string Description, long Location, etc, etc, etc)
{
}
}
,做更多的東西一樣:
public class Home : Controller
{
public ActionResult FilteredFooList(Foo filterObj)
{
}
}
也許這是不可能的或一個好主意?
你的fooFilter不是一個過濾器,它是一個Foo對象。過濾器謂詞是一個表達式,其值爲true或false,對嗎? – elgonzo
'.ID'和'.Location'不能爲null,因爲它們是值類型。你打算如何處理值類型? – NetMage
確實,'fooFilter'是一個考試程序,用於通過示例進行查詢,例如System.DirectoryServices.AccountManagement.PrincipalSearcher如何工作。 – NetMage