2009-12-11 5 views
3

(미안 해요, 내가 잘 포맷하려하지만 코드가 제대로 작동하려면 서식을 얻을 수 없다) 내가 얻을일반적인 방법에서의 LINQ 표현을 구축

을 :

Incorrect number of arguments supplied for call to method 
'System.Linq.IQueryable`1[System.String] 
Take[String](System.Linq.IQueryable`1[System.String], Int32)' 

내가 실행할 때 :

string[] companies = { "Consolidated Messenger", "Alpine Ski House", "Southridge Video", "City Power & Light", 
     "Coho Winery", "Wide World Importers", "Graphic Design Institute", "Adventure Works", 
     "Humongous Insurance", "Woodgrove Bank", "Margie's Travel", "Northwind Traders", 
     "Blue Yonder Airlines", "Trey Research", "The Phone Company", 
     "Wingtip Toys", "Lucerne Publishing", "Fourth Coffee" }; 

// The IQueryable data to query. 
IQueryable<String> queryableData = companies.AsQueryable<string>(); 

// EXCEPTION HERE 
Expression e2 = Expression.Call(
    typeof(Queryable).GetMethods().Where(m => m.Name == "Take") 
     .Single().MakeGenericMethod(new Type[] { typeof(string) }), 
    new Expression[] { Expression.Constant(4) }); 

IQueryable<string> res = queryableData.Provider.CreateQuery<string>(e2); 

foreach (string s in res) 
{ 
    Console.WriteLine(s); 
} 

나는 내가 쿼리 가능한 객체 자체를 전달해야한다고 생각하지만, 나는 (이 경우에도 필요한 경우)이 작업을 수행하는 방법을 알아낼 수 없습니다.

도움을 주시면 감사하겠습니다.

감사합니다.

+0

포맷 도움에 감사드립니다. – Sako73

답변

3
Expression e2 = Expression.Call(
    typeof(Queryable).GetMethods().Where(m => m.Name == "Take") 
     .Single().MakeGenericMethod(new Type[] { typeof(string) }), 
    new Expression[] { 
     Expression.Constant(queryableData), 
     Expression.Constant(4) }); 
+1

니스. 또한 "Where"호출을 "Single"호출로 대체하고 새로운 Type [] {typeof (string)}을 typeof (string)로 대체하여 구문을 단순화 할 수 있지만 그저 퀴 블링 일뿐입니다. –

+0

고마워요, 제가 찾던 곳입니다. – Sako73

관련 문제