C# 比较LINQ方法语法中的两个数字列表

C# 比较LINQ方法语法中的两个数字列表,c#,linq,linq-method-syntax,C#,Linq,Linq Method Syntax,我有两个数字列表 public int[] numbersA = { 0, 2, 4 }; public int[] numbersB = { 1, 3, 5 }; 我需要输出如下 预期结果 如何通过LINQ方法语法实现?方法语法: var result = numbersA.SelectMany(c => numbersB, (c, o) => new { c, o }) .Where(d => d.c < d.o)

我有两个数字列表

public int[] numbersA = { 0, 2, 4 };
public int[] numbersB = { 1, 3, 5 }; 
我需要输出如下

预期结果 如何通过
LINQ
方法语法实现?

方法语法:

var result = numbersA.SelectMany(c => numbersB, (c, o) => new { c, o })
                     .Where(d => d.c < d.o)
                     .Select(v=>  v.c + "is less than"+ v.o);
var result=numbersA.SelectMany(c=>numbersB,(c,o)=>new{c,o})
.式中(d=>d.cv.c+”小于“+v.o”);
方法语法:

var result = numbersA.SelectMany(c => numbersB, (c, o) => new { c, o })
                     .Where(d => d.c < d.o)
                     .Select(v=>  v.c + "is less than"+ v.o);
var result=numbersA.SelectMany(c=>numbersB,(c,o)=>new{c,o})
.式中(d=>d.cv.c+”小于“+v.o”);

有时,冗长优先于简洁,因为在大多数情况下,它更清晰、更容易阅读,尽管打字可能要长一点。

当您使用数组而不是列表时,没有直接的方法来实现您想要的

但是如果你想使用数组,我建议使用

int[]numbersA=newint[]{0,2,4};
int[]numbersB=新的int[]{1,3,5};
Array.ForEach(numbersA,x=>
{
Array.ForEach(numbersB,y=>
{
if(x

有时,冗长优先于简洁,因为在大多数情况下,它更清晰、更容易阅读,尽管打字可能要长一点。

当您使用数组而不是列表时,没有直接的方法来实现您想要的

但是如果你想使用数组,我建议使用

int[]numbersA=newint[]{0,2,4};
int[]numbersB=新的int[]{1,3,5};
Array.ForEach(numbersA,x=>
{
Array.ForEach(numbersB,y=>
{
if(x

尽管这个问题只不过是无用的业务逻辑,但尝试一下似乎很有趣。我的解决方案是
List.Foreach
而不是
Linq
,但它只包含在一条语句中

    static void Main(string[] args)
    {
        int[] numsA = { 0, 2, 4 };
        int[] numsB = { 1, 3, 5 };
        numsA.ToList().ForEach((a) =>
        {
            numsB.Where(b => b > a).ToList()
            .ForEach((x) =>
            {
                Console.WriteLine("{0}>{1}", a, x);
            });
        });
    }

尽管这个问题只不过是无用的业务逻辑,但尝试一下似乎很有趣。我的解决方案是
List.Foreach
而不是
Linq
,但它只包含在一条语句中

    static void Main(string[] args)
    {
        int[] numsA = { 0, 2, 4 };
        int[] numsB = { 1, 3, 5 };
        numsA.ToList().ForEach((a) =>
        {
            numsB.Where(b => b > a).ToList()
            .ForEach((x) =>
            {
                Console.WriteLine("{0}>{1}", a, x);
            });
        });
    }
尝试一下:

int[] numbersA = { 0, 2, 4 };
int[] numbersB = { 1, 3, 5 };

var result = numbersA.Select(a => numbersB.Where(b => a < b)
                                          .Select(b => a + " is less than " + b))
                     .SelectMany(arr => arr)
                     .ToArray();
int[]numbersA={0,2,4};
int[]numbersB={1,3,5};
var result=numbersA.Select(a=>numbersB.Where(b=>aa+“小于”+b))
.SelectMany(arr=>arr)
.ToArray();
尝试一下:

int[] numbersA = { 0, 2, 4 };
int[] numbersB = { 1, 3, 5 };

var result = numbersA.Select(a => numbersB.Where(b => a < b)
                                          .Select(b => a + " is less than " + b))
                     .SelectMany(arr => arr)
                     .ToArray();
int[]numbersA={0,2,4};
int[]numbersB={1,3,5};
var result=numbersA.Select(a=>numbersB.Where(b=>aa+“小于”+b))
.SelectMany(arr=>arr)
.ToArray();

ForEach
不是LINQ。这是一个
List
方法。如果您要使用“为了清晰起见,冗长优于简洁”参数,那么您最好只使用常规
作为
foreach
而不是
数组。foreach
。它们的速度都更快,冗长程度也差不多,而且它们的意图更加清晰。
ForEach
不是LINQ。这是一个
List
方法。如果您要使用“为了清晰起见,冗长优于简洁”参数,那么您最好只使用常规
作为
foreach
而不是
数组。foreach
。它们的速度都更快,冗长程度也差不多,而且它们的意图更加清晰。
ForEach
不是LINQ。这是一种
List
方法。OP需要一个LINQ解决方案,而
ForEach
不是LINQ。因此,这并不能解决他的问题。我想他只是想要一些看起来优雅的东西和一句台词就够了。你的答案是最好的。S.Akbari在回答linq,但OP说不,你不觉得他很有趣吗?
ForEach
不是linq。这是一种
List
方法。OP需要一个LINQ解决方案,而
ForEach
不是LINQ。因此,这并不能解决他的问题。我想他只是想要一些看起来优雅的东西和一句台词就够了。你的答案是最好的。S.Akbari在回答linq,但是OP说不,你不觉得他很有趣吗?谢谢你们的回答和解释。感谢Akbari,只是为了好玩,我运行了一些基准测试,比较了您的解决方案和我的解决方案。使用1000个大小的源阵列并运行100个连续测试,我的解决方案平均为0.272秒,而你的解决方案平均为0.351秒。循环如何?感谢各位的回答和解释。感谢Akbari,只是为了好玩,我运行了一些基准测试,比较了您的解决方案和我的解决方案。使用1000个大小的源阵列并运行100个连续测试,我的解决方案平均为0.272秒,而你的解决方案平均为0.351秒。循环又如何?