Мне нужен метод, который принимает массив имен свойств properties
и возвращает запрос документа IQueryable query
с объектами, содержащими только эти свойства.IQueryable должен быть повторно использован для дальнейшего объединения в стиле LINQ, например, с .Where(...)
.
Попытка 1
string sql = $"SELECT {string.Join(",", properties.Select(x => $"c['{x}']"))} FROM c";
IQueryable<MyType> query = DocumentClient.CreateDocumentQuery<MyType>(CollectionUri, sql);
Это не работает, потому что, когда я пытаюсьЧтобы связать .Where(x => x.ObjectType == "user")
с query
, генерируется следующее исключение (даже когда properties
содержит все свойства, необходимые для построения MyType
):
System.ArgumentException: 'Expression of type 'System.Linq.IQueryable`1[System.Object]' cannot be used for parameter of type 'System.Linq.IQueryable`1[MyType]' of method 'System.Linq.IQueryable`1[MyType] Where[MyType](System.Linq.IQueryable`1[MyType], System.Linq.Expressions.Expression`1[System.Func`2[MyType,System.Boolean]])''
Попытка 2
Я попытался использовать dynamic
вместо:
string sql = $"SELECT {string.Join(",", properties.Select(x => $"c['{x}']"))} FROM c";
IQueryable<dynamic> query = DocumentClient.CreateDocumentQuery(CollectionUri, sql);
Это также не работает: когда я пытаюсь связать .Where(x => x["objectType"] == "user")
с query
, код не 'даже компилировать:
CS1963 An expression tree may not contain a dynamic operation
Что делать?
Я использую Microsoft.Azure.DocumentDB.Core (2.2.1) в .NET Standard 2.0.