これらのプロパティのテキスト名に基づいて、プロパティ値を動的に読み取ろうとします。これは単にネストされたクラスに対して機能します。しかし、ネストされたコレクションクラスがある場合、動的linqを使用してアイテムを選択できるようにしたいと思います。残念ながら、コレクションを読んでいると、
'ターゲットオブジェクトはExpandoObjectではありません'(.FirstOrDefault)。
編集するアイデア、またはおそらく別のソリューション?
私のコード(.net core 2.1):
string value = string.Empty;
var dataClassProperty = dataClass.GetType().GetProperty(dataClassPropertyName).GetValue(dataClass, null);
if (dataClassProperty is IEnumerable<object>)
{
object nestedPropertyItem = (dataClassProperty as IEnumerable<object>)
.AsQueryable()
.FirstOrDefault(collectionDynamicLinq);
if (nestedPropertyItem != null)
value = nestedPropertyItem.GetType().GetProperty(nestedPropertyName).GetValue(nestedPropertyItem, null)?.ToString() ?? "";
}
(データベース)エンティティクラスで動的Linqを使用する場合は、 System.Linq.Dynamic.Coreを使用できます。
これを使えば、簡単にテキストベースのlinqを書くことができます
var query = db.Customers
.Where("City == @0 and Orders.Count >= @1", "London", 10)
.OrderBy("CompanyName")
.Select("new(CompanyName as Name, Phone)");