相关疑难解决方法(0)

什么函数在jQuery中充当.SelectMany()?

让我解释一下:

我们知道jQuery中的map函数充当.Select()(如在LINQ中).

$("tr").map(function() { return $(this).children().first(); }); // returns 20 tds
Run Code Online (Sandbox Code Playgroud)

现在的问题是我们如何才能在jQuery中使用.SelectMany()?

$("tr").map(function() { return $(this).children(); }); // returns 10 arrays not 20 tds!
Run Code Online (Sandbox Code Playgroud)

这是我的实例:http : //jsfiddle.net/8aLFQ/4/
如果我们有selectMany,"l2"应为8.

[注意]请不要坚持这个例子,上面的代码只是显示我的意思是SelectMany()否则很容易说$("tr").children();

希望它足够清楚.

javascript linq jquery

35
推荐指数
3
解决办法
6536
查看次数

在翻译LINQ表达式时,C#编译器如何选择SelectMany?

Enumerable.SelectMany有4个重载签名.为简单起见,我们忽略了带有int参数的两个签名.所以我们有4个SelectMany签名:

public static IEnumerable<TResult> SelectMany<TSource, TResult>(
    this IEnumerable<TSource> source,
    Func<TSource, IEnumerable<TResult>> selector
)

public static IEnumerable<TResult> SelectMany<TSource, TCollection, TResult>(
    this IEnumerable<TSource> source,
    Func<TSource, IEnumerable<TCollection>> collectionSelector,
    Func<TSource, TCollection, TResult> resultSelector
)
Run Code Online (Sandbox Code Playgroud)

我的问题是:在将LINQ表达式转换为扩展方法调用时,C#编译器如何选择SelectMany?

基本上,如果LINQ表达式中有多个from,则会有SelectMany.但是,似乎C#编译器只选择第二个签名.永远不会使用第一个签名.

        IEnumerable<int> en1 = Enumerable.Range(1, 3);
        IEnumerable<double> en2 = new double[] { 1.0, 3.14 };

        IEnumerable<string> en3 =
            from i1 in en1
            from i2 in en2
            select (i1 * i2).ToString();

        foreach (var i in en3)
        {
            Console.WriteLine(i);
        }
Run Code Online (Sandbox Code Playgroud)

在Reflector的帮助下,我可以看到上面的LINQ表达式被翻译成了

en1.SelectMany<int, double, string>(delegate (int i1) { …
Run Code Online (Sandbox Code Playgroud)

c# linq select expression

9
推荐指数
2
解决办法
3795
查看次数

标签 统计

linq ×2

c# ×1

expression ×1

javascript ×1

jquery ×1

select ×1