Below is my code snippet , I want to display only 10 records from a table.
AdventureWorksDataContext adc = new AdventureWorksDataContext();
var query1 = from customers in adc.Customers
orderby (customers.FirstName).Take(10)
select new
{
customers.FirstName,
customers.LastName,
customers.CustomerAddresses
};
foreach (var v in query1) -> Line 23
{
Console.Write(v.FirstName);
Console.Write(" ");
Console.Write(v.LastName);
Console.Write(" ");
Console.Write(v.CustomerAddresses);
}
I’m getting the following run-time error:
Unhandled Exception: System.InvalidOperationException: Cannot order by type 'System.Collections.Generic.IEnumerable`1[System.Char]'.
at System.Data.Linq.SqlClient.QueryConverter.VisitOrderBy(Expression sequence, LambdaExpression expression, SqlOrderType orderType)
at System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(Method CallExpression mc)
at System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(MethodCallExpres
sion mc)
at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
at System.Data.Linq.SqlClient.QueryConverter.VisitSelect(Expression sequence,
LambdaExpression selector)
at System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(Method
CallExpression mc)
at System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(MethodCallExpres
sion mc)
at System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node)
at System.Data.Linq.SqlClient.QueryConverter.ConvertOuter(Expression node)
at System.Data.Linq.SqlClient.SqlProvider.BuildQuery(Expression query, SqlNod
eAnnotations annotations)
at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider
.Execute(Expression query)
at System.Data.Linq.DataQuery`1.System.Collections.Generic.IEnumerable<T>.Get
Enumerator()
at LabAssignment4Part2.AdventureWorks.Main(String[] args) in E:\AdventureWorks.cs:line 23
I guess I’m not implementing the Take method in a correct way.
kindly help me out.
Edit:
Take should happen on the query object as a whole, not on the orderby clause. You could also say
foreach (var v in query1.Take(10))and it would be valid.