Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从泛型方法构造Linq表达式_Linq_Expression Trees - Fatal编程技术网

从泛型方法构造Linq表达式

从泛型方法构造Linq表达式,linq,expression-trees,Linq,Expression Trees,(很抱歉,我试图将其格式化,但无法使代码格式正常工作) 我得到: 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",

(很抱歉,我试图将其格式化,但无法使代码格式正常工作)

我得到:

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);
}
string[]公司={“联合信使”、“高山滑雪屋”、“南岭视频”、“城市电力与照明”,
“Coho酒庄”、“全球进口商”、“平面设计学院”、“冒险作品”,
“巨额保险”、“伍德格罗夫银行”、“玛吉旅行”、“北风商人”,
“蓝色那边航空公司”、“特雷研究公司”、“电话公司”,
“翼尖玩具”、“卢塞恩出版”、“第四咖啡”};
//要查询的IQueryable数据。
IQueryable queryableData=companys.AsQueryable();
//这里例外
表达式e2=表达式。调用(
typeof(Queryable).GetMethods()。其中(m=>m.Name==“Take”)
.Single().MakeGenericMethod(新类型[]{typeof(string)}),
新表达式[]{Expression.Constant(4)});
IQueryable res=queryableData.Provider.CreateQuery(e2);
foreach(res中的字符串s)
{
控制台。写入线(s);
}
我认为我需要传入可查询对象本身,但我不知道如何做到这一点(如果需要的话)

感谢您的帮助


谢谢。

很好。另外,您可以通过将“Where”调用替换为“Single”调用并将新类型[]{typeof(string)}替换为typeof(string)来简化语句,但这只是个小问题。谢谢,这正是我想要的。谢谢您提供的格式帮助。
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) });