以前,我對我剛纔的問題有很大的幫助,謝謝vyrp , How do I create and populate a dynamic object using a dynamically built lambda expression如何使用動態構建的lambda表達式搜索動態對象IEnumerable <dynamic>?
現在我正在尋找搜索的動態對象,並像以前一樣,我不知道對象的屬性,因此,我正在搜索的內容直到運行時。
下面是構建動態對象的代碼:
// Get list of optional fields
var optFieldList = await _tbList_FieldRepository.GetAsync(lf => lf.ListID == listId && lf.DisplayInList == true);
// order list of optional fields
optFieldList.OrderBy(lf => lf.DisplayOrder);
// Get base Data excluding Inactive if applicable
IEnumerable<tbList_Data> primaryData = await _tbList_DataRepository.GetAsync(ld => ld.ListID == listId && (ld.IsActive == includeInactive ? ld.IsActive : true));
// Build IEnumerable<dynamic> from base results plus any optional fields to be displayed in table
var results = primaryData.Select(pd => {
dynamic result = new System.Dynamic.ExpandoObject();
result.Id = pd.ID;
result.PrimaryData = pd.PrimaryData;
result.DisplayOrder = pd.DisplayOrder;
result.IsActive = pd.IsActive;
foreach (var optField in optFieldList)
{
switch (optField.FieldType.ToLower()) {
case "text":
((IDictionary<string, object>)result).Add(optField.FieldName, pd.tbList_DataText.Where(ld => ld.DataRowID == pd.ID && ld.ListColumnID == optField.ID).Select(ld => ld.DataField).DefaultIfEmpty("").First());
break;
}
}
return result;
});
出於測試目的,我有2個動態字段,「******中國」和「FuelType」
我可以搜索已知的領域( s)即PrimaryData,沒問題,如下所示。
results = results.Where(r => r.PrimaryData.Contains(searchString));
如果我知道在設計時的場******中國下面的工作
results = results.Where(r => r.PhoneNumber.Contains(searchString));
,但我想要做的,是一樣的東西:
results = results.Where(r => r.PrimaryData.Contains(searchString)
|| foreach(var optField in optFieldList)
{
r.optField.FieldName.Contains(searchString)
})
結束了
results = results.Where(r =>
r.PrimaryData.Contains(searchString)
|| r.PhoneNumber.Contains(searchString) ||
r.FuelType.Contains(searchString));
但明顯該代碼不起作用。我試過了一堆不同的嘗試,都沒有成功,所以我在尋找建議。由於
你是什麼意思,它不工作?請詳細說明。 – CodingYoshi
那麼編譯錯誤是什麼? – CodingYoshi