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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top