Использование C# обобщений.
Кроме того, в C# локальные переменные должны быть camelCased
, а не PascalCased
.
Я предполагаю, что ваше предложение Where
является указанием типа c, что означает, что вам нужно переместить это в параметр. Я предполагаю, что это должно быть Expression<>
вместо Func<>
вместо простого Func<>
(это зависит от того, используете ли вы IQueryable<T>
или IEnumerable<T>
).
public async Task<List<T> GetDocumentItemsAsync<T>( Expression<Func<T,Boolean>> predicate )
{
List<T> list = new List<T>();
try
{
collectionLink = UriFactory.CreateDocumentCollectionUri(databaseId, collectionId);
var query = client.CreateDocumentQuery<T>(collectionLink)
.Where( predicate )
.AsDocumentQuery();
while (query.HasMoreResults)
{
var retrivedData2 = await query.ExecuteNextAsync<T>();
list.AddRange(retrivedData2);
}
}
catch (DocumentClientException ex)
{
Debug.WriteLine("Error: ", ex.Message);
}
return list;
}
Используется вот так:
var start = await cosmosManager.GetDocumentItemsAsync<LogStart>( x => x.Activity == "Start" );
var views = await cosmosManager.GetDocumentItemsAsync<LogViews>( x => x.Activity == "Views" );
var feedback = await cosmosManager.GetDocumentItemsAsync<LogFeedback>( x => x.Activity == "Feedback" );