DataSource.Table.where (StringofConstrain) não existe no Linqtosql para suporte ao Odata?
-
26-09-2019 - |
Pergunta
Estou olhando isto Telerik Demo, e não consigo conseguir a declaração de "conde" para funcionar. Acredito que o comando a seguir é suportado apenas no EntityFramework, e não no LINQ2SQL.
return CurrentDataSource.Products.Where(where).Count();
O parâmetro "onde" em minúsculas é na verdade uma string que é passada no URL do ADO.NET DataServices (ODATA). Este URL deve ser enviado ao provedor LINQ para restringir ainda mais a consulta.
Se isso não for suportado no LINQ2SQL, como posso fazer uma declaração semelhante?
Solução
Você precisa usar uma expressão lambda para o predicado usado pelo Queryable.Where
método:
return CurrentDataSource.Products.Where(p => p.Id > 100).Count();
Se você realmente deseja usar uma string, dê uma olhada no Dynamic Linq, começando com a postagem do blog de Scott Gu: LINQ dinâmico (Parte 1: Usando a Biblioteca de Consulta Dynamic Linq). Então você deve ser capaz de escrever consultas semelhantes a:
return CurrentDataSource.Products.Where("Id > 100").Count();
Outras dicas
Você pode escrever sua própria extensão genérica, como deve escrever o mais eficaz depende da situação ... mas provavelmente deve ser algo como:
public static class IQueryableExtensions
{
public static int Count(this IQueryable<T> query)
{
return query.ToList().Count;
}
}
Provavelmente essa não é a maneira mais eficaz e só funciona se você tiver um iQueryable. Se o desempenho não for um problema, basta usá -lo.