2012-03-29 20 views
0

下面是我的代碼片段,我想從一個表中只顯示10條記錄。在LinQ C中修復'Take'擴展方法#

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,可能會有更好的詞......) – 2012-03-29 21:09:56

+0

你應該真的開始檢查你的其他問題並接受解決它們的答案。我可以看到你問了其他已成功解答的問題。 – karlphillip 2012-04-07 16:04:21

回答

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

編輯: 應採取查詢對象上發生作爲一個整體,而不是在排序依據條款。你也可以說foreach (var v in query1.Take(10))它是有效的。