0

我正在查看this Telerik演示,並且無法使「count」語句正常工作。我相信只有EntityFramework支持以下命令,而不支持Linq2SQL。DataSource.Table.Where(stringOfConstraint)在LinqToSQL中不存在OData支持嗎?

return CurrentDataSource.Products.Where(where).Count(); 

小寫參數「where」實際上是一個在ADO.Net DataServices(OData)url中傳遞的字符串。這個URL 應該被髮送到Linq提供者來進一步約束查詢。

如果在Linq2SQL中不支持,我怎麼能做出類似的聲明?

回答

1

您需要使用lambda表達式由Queryable.Where方法所使用的謂詞:

return CurrentDataSource.Products.Where(p => p.Id > 100).Count(); 

如果你真的想用一個字符串,然後看看動態LINQ,從斯科特谷的博客文章: Dynamic LINQ (Part 1: Using the LINQ Dynamic Query Library)。那麼你應該可以寫出類似於如下的查詢:

return CurrentDataSource.Products.Where("Id > 100").Count(); 
0

你可以寫自己的泛型的擴展,你應該怎麼寫一個最有效的視情況而定...但它可能應該是這樣的:

public static class IQueryableExtensions 
{ 
    public static int Count(this IQueryable<T> query) 
    { 
     return query.ToList().Count; 
    } 
} 

這可能不是最有效的方法只有當你有一個IQueryable時纔有效。如果性能不是問題,就使用它。