Marc,
[quoted text, click to view] > var query = from b in Default.Db.Klients where
> region =="xx"
> select b;
>
> var query2 = query.OrderBy(b=>b.Kood).ThenBy(b=>b.Tanav);
> int count = query.Count();
> foreach(var item in query2) {
> // ...
> }
Thank you.
I need to pass those queries from my generic WinForms form constructor to
generic paged data retriever class.
I tried the following code but got error shown in comment. How to fix ?
class VirtualGridForm<T>: Form {
publicVirtualGridForm() {
IOrderedQueryable<T> orderedQueryable;
IQueryable<T> queryable;
switch ( typeof(T).Name ) {
case "Klient":
queryable = (IQueryable<T>)(from b in Default.Db.Klients select b);
//Error: 'T' does not contain a definition for 'Kood' and no extension
method 'Kood' accepting a first argument
// of type 'T' could be found (are you missing a using directive or an
assembly reference?)
orderedQueryable = queryable.OrderBy(b => b.Kood).ThenBy(b=>b.Tanav);
break;
case "Strings":
// this is ok but where clause needs to be duplicated if present.
queryable = (IOrderedQueryable<T>)(from b in Default.Db.Strings select b);
orderedQueryable = (IOrderedQueryable<T>)(from b in Default.Db.Strings
orderby b.Est
select b);
break;
default:
throw new ApplicationException("No query for table");
}
DataRetriever<T> DataRetriever = new DataRetriever<T>( queryable,
orderedQueryable);
}}
/// data retriever class based on MSDN Virtual DataGridView sample.
class DataRetriever<T> : IDataPageRetriever<T> {
IQueryable<T> Queryable;
IOrderedQueryable<T> OrderedQueryable;
internal DataRetriever(IQueryable<T> queryable,
IOrderedQueryable<T> orderedQueryable) {
Queryable = queryable;
OrderedQueryable = orderedQueryable;
}
public IList<T> SupplyPageOfData(int lowerPageBoundary, int rowsPerPage) {
return OrderedQueryable.Skip(lowerPageBoundary).Take(rowsPerPage).ToList();
}}
Btw. in ADO .NET I can simply use
DataRetriever<T> DataRetriever = new DataRetriever<T>( "SELECT * FROM
Klient" ,
" ORDER BY Kood, Tanav" );