Drexel
2010-03-24, 09:11:15
Ich habe hier eine Klasse movie. u.a. mit dem public member "created".
public class movie
{
...
public DateTime created {get; set;}
...
}
Die Klasse wurde über LINQ to SQL aus einer Datenbank erzeugt. Die Datenbank frage ich jetzt mit LINQ ab. Ich will alle movies abfragen und diese auch vom user sortieren lassen. Prinzipiell funktioniert das auch so (die SortExpression wird noch nicht vollständig ausgewertet):
public class MovieDAO
{
private mymdbDataContext mymdbDC = new mymdbDataContext();
public IQueryable<movie> GetMovies(int maximumRows, int startRowIndex, string SortExpression)
{
IQueryable<movie> movies = from m in this.mymdbDC.movie select m;
if (SortExpression != "")
{
movies = movies.OrderBy(mv => mv.internaltitle);
}
else
{
movies.OrderBy(mv => mv.created);
}
movies = movies.Skip(startRowIndex).Take(maximumRows);
return movies;
}
}
Zum besseren Verständnis meinerseits habe ich nun versucht, den Lambda Ausdruck mal in einen Delegate umzuwandeln:
public delegate DateTime GetMemberinfoDelegate (movie mv);
public class MovieDAO
{
private mymdbDataContext mymdbDC = new mymdbDataContext();
private DateTime getDT(movie mv)
{
return mv.created;
}
public IQueryable<movie> GetMovies(int maximumRows, int startRowIndex, string SortExpression)
{
IQueryable<movie> movies = from m in this.mymdbDC.movie select m;
if (SortExpression != "")
{
movies = movies.OrderBy(mv => mv.internaltitle);
}
else
{
GetMemberinfoDelegate del = this.getDT;
movies = movies.OrderBy(del);
}
movies = movies.Skip(startRowIndex).Take(maximumRows);
return movies;
}
}
Sollte meiner Meinung nach eigentlich das gleiche sein, aber das funktioniert nicht. Visual Studio meldet mir:
The type arguments for method 'System.Linq.Enumerable.OrderBy<TSource,TKey>(System.Collections.Generic.IEnumerable<TSource>, System.Func<TSource,TKey>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
Ich habs auch schon diverse andere Sachen probiert wie als Expresseion<T>, aber alles funktioniert nicht, nur wenn ich den Lambda Ausdruck direkt an OrderBy übergebe. Kann mir jemand sagen wieso bzw. was falsch ist?
public class movie
{
...
public DateTime created {get; set;}
...
}
Die Klasse wurde über LINQ to SQL aus einer Datenbank erzeugt. Die Datenbank frage ich jetzt mit LINQ ab. Ich will alle movies abfragen und diese auch vom user sortieren lassen. Prinzipiell funktioniert das auch so (die SortExpression wird noch nicht vollständig ausgewertet):
public class MovieDAO
{
private mymdbDataContext mymdbDC = new mymdbDataContext();
public IQueryable<movie> GetMovies(int maximumRows, int startRowIndex, string SortExpression)
{
IQueryable<movie> movies = from m in this.mymdbDC.movie select m;
if (SortExpression != "")
{
movies = movies.OrderBy(mv => mv.internaltitle);
}
else
{
movies.OrderBy(mv => mv.created);
}
movies = movies.Skip(startRowIndex).Take(maximumRows);
return movies;
}
}
Zum besseren Verständnis meinerseits habe ich nun versucht, den Lambda Ausdruck mal in einen Delegate umzuwandeln:
public delegate DateTime GetMemberinfoDelegate (movie mv);
public class MovieDAO
{
private mymdbDataContext mymdbDC = new mymdbDataContext();
private DateTime getDT(movie mv)
{
return mv.created;
}
public IQueryable<movie> GetMovies(int maximumRows, int startRowIndex, string SortExpression)
{
IQueryable<movie> movies = from m in this.mymdbDC.movie select m;
if (SortExpression != "")
{
movies = movies.OrderBy(mv => mv.internaltitle);
}
else
{
GetMemberinfoDelegate del = this.getDT;
movies = movies.OrderBy(del);
}
movies = movies.Skip(startRowIndex).Take(maximumRows);
return movies;
}
}
Sollte meiner Meinung nach eigentlich das gleiche sein, aber das funktioniert nicht. Visual Studio meldet mir:
The type arguments for method 'System.Linq.Enumerable.OrderBy<TSource,TKey>(System.Collections.Generic.IEnumerable<TSource>, System.Func<TSource,TKey>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
Ich habs auch schon diverse andere Sachen probiert wie als Expresseion<T>, aber alles funktioniert nicht, nur wenn ich den Lambda Ausdruck direkt an OrderBy übergebe. Kann mir jemand sagen wieso bzw. was falsch ist?