2012-03-29 18 views
0

以下は私のコードスニペットです。テーブルから10レコードしか表示しません。LinQでの 'Take'拡張メソッドの修正C#

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); 
      } 

私は、次の実行時エラーを取得しています:

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 

私は正しい方法でテイクメソッドを実装していませんよね。

親切にお手伝いします。

+1

あなたは 'Take'メソッドを「実装」していません。*あなたは*呼び出しています。 (これはLinq-to-SQLなので、より良い言葉が存在するかもしれません...) –

+0

あなたは本当に他の質問を見直し、解決した回答を受け入れてください。私はあなたが成功裏に答えられた他の質問をしたのを見ることができます。 – karlphillip

答えて

1
AdventureWorksDataContext adc = new AdventureWorksDataContext();  
var query1 = (from customers in adc.Customers 
         orderby (customers.FirstName) 
         select new 
         { 
          customers.FirstName, 
          customers.LastName, 
          customers.CustomerAddresses 
         }).Take(10); 
foreach (var v in query1) 
     { 
      Console.Write(v.FirstName); 
      Console.Write(" "); 
      Console.Write(v.LastName); 
      Console.Write("  "); 
      Console.Write(v.CustomerAddresses); 
     } 

編集: TakeはないORDERBY句に、全体としてクエリオブジェクトに起こるはず。 foreach (var v in query1.Take(10))と言うこともでき、それは有効です。

関連する問題