我想為常見查詢創建一個方法。此查詢連接三個表,我想使用where子句中所有表的屬性。
問題是當我在輸入上創建謂詞時,我無法在選定的匿名物件上實作它,因為所有三個表都嵌套在匿名物件中。
我應該如何實作這個常用方法?我想在不同的where條件下使用它并且只使用一個查詢。
uj5u.com熱心網友回復:
最常見的模式是這樣的:
public async Task<IList<QueryResult>> GetQueryResults(
Expression<Func<Customer,bool>> customerFilter,
Expression<Func<Project, bool>> projectFilter )
{
var q = from c in Set<Customer>().Where(customerFilter)
join p in Set<Project>().Where(projectFilter)
on c.Id equals p.Id
select new QueryResult() { CustomerName = c.Name, ProjectName = p.Name };
return await q.ToListAsync();
}
你會這樣稱呼:
var results = await db.GetQueryResults(c => c.Name == "a", p => true);
您可以通過讓呼叫代碼更改查詢中使用的基本 IQueryables 來賦予呼叫代碼更多功能,例如
public async Task<IList<QueryResult>> GetQueryResults(
Func<IQueryable<Customer>, IQueryable<Customer>> customerFilter,
Func<IQueryable<Project>, IQueryable<Project>> projectFilter )
{
var q = from c in customerFilter(Set<Customer>())
join p in projectFilter(Set<Project>())
on c.Id equals p.Id
select new QueryResult() { CustomerName = c.Name, ProjectName = p.Name };
return await q.ToListAsync();
}
你會這樣稱呼它:
var results = await db.GetQueryResults(c => c.Where(c => c.Name == "a"), p => p);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/506992.html
