我在將謂詞傳遞給另一個函數時遇到了問題。此謂詞將作爲試圖調用第二個函數的參數傳入。以下是一段代碼片段。傳遞作爲參數傳入的謂詞
public IEnumerable<ViewModel> BuildModel<TPart, TRecord>(Expression<Func<TRecord, bool>> predicate)
where TPart : ContentPart<TRecord>
where TRecord : ContentPartRecord
{
IEnumerable<ReportPart> items = GetList<ReportPart, ReportRecord>(predicate);
這個問題是謂語參數,在調用GetList()
它使示數,稱呼叫有一些無效參數。在獲取列表電話是:
public IEnumerable<TPart> GetList<TPart, TRecord>(Expression<Func<TRecord, bool>> predicate)
where TPart : ContentPart<TRecord>
where TRecord : ContentPartRecord
我一直在試圖改變參數一堆不同的方式試圖得到這個工作,但我還沒有成功。也許我不明白爲什麼編譯器認爲'predicate'與GetList()
期望的不同。
編輯:詳細信息
ReportPart : ContentPart<ReportRecord>
ReportRecord : ContentPartRecord
ContentPart和ContentPartRecord都是基本類
呼叫者BuildModels
List<ReportViewModel> model = _service.BuildReports<ReportPart, ReportRecord>(x => x.Id == 1).ToList();
BuildModels
public IEnumerable<ReportViewModel> BuildReports<TPart, TRecord>(System.Linq.Expressions.Expression<Func<TRecord, bool>> predicate)
where TPart : ContentPart<TRecord>
where TRecord : ContentPartRecord
{
List<ReportViewModel> model = new List<ReportViewModel>();
IEnumerable<ReportPart> reportParts = GetList<ReportPart, ReportRecord>(predicate);
//do some stuff with reportParts
return model;
}
}
的GetList
public IEnumerable<TPart> GetList<TPart, TRecord>(System.Linq.Expressions.Expression<Func<TRecord, bool>> filter)
where TPart : ContentPart<TRecord>
where TRecord : ContentPartRecord
{
return filter == null ?
Services.ContentManager.Query<TPart, TRecord>().List() :
Services.ContentManager.Query<TPart, TRecord>().Where(filter).List();
}
您能否發佈精確的錯誤信息?你也可以發佈「ReportPart」和「ReportRecord」的繼承層次嗎? – Enigmativity
根據您的錯誤消息,問題是由傳遞給BuildModel的參數引起的。你打電話過得怎麼樣? –
它不會錯誤地調用'GetList'。它錯誤地調用了'BuildModel',你在這裏沒有顯示。 –