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
C# 如何在Linq selectmany语句中使用方法?_C#_Linq - Fatal编程技术网

C# 如何在Linq selectmany语句中使用方法?

C# 如何在Linq selectmany语句中使用方法?,c#,linq,C#,Linq,如何在linq selectmany语句中使用方法 public class BIT128Object { public long High {get; set;} public long Low {get; set;} public string Message {get; set;} } 此类用于表示位数组中的整数索引。 我想从BIT128Object中提取所有索引。 (确切地说,我想要索引和消息对的所有案例,就像group by一样) 我在下面定义了将高位和低位

如何在linq selectmany语句中使用方法

public class BIT128Object
{
    public long High {get; set;}
    public long Low  {get; set;}
    public string Message {get; set;}
}
此类用于表示位数组中的整数索引。 我想从BIT128Object中提取所有索引。 (确切地说,我想要索引和消息对的所有案例,就像group by一样) 我在下面定义了将高位和低位解析为int索引数组的方法

private int[] ParseIndices(long high, long low)
{
    List<int> indexList = new List<int>();

    BitArray highBitArr = new BitArray(BitConverter.GetBytes(high));
    if(highBitArr != null)
    {
        for (int i = 0; i < 64; ++i)
        {
            if (highBitArr.Get(i) == true)
                indexList.Add(i + 64);
            }
        }


        BitArray lowBitArr = new BitArray(BitConverter.GetBytes(low));
        if(lowBitArr != null)
        {
            for (int i = 0; i < 64; ++i)
            {
                if (lowBitArr.Get(i) == true)
                     indexList.Add(i);
            }
         }


     return indexList.ToArray();
 }
下面是我的linq声明

var datum = bitObjectList.SelectMany(x => ParseIndices(x.High, x.Low)
                             .Select(z => new { 
                               Index = z,
                               Message = x.Message
                             }));
但是在查询linq时会发生异常。 下面是异常消息

无法分析表达式“value(ClassName)”,因为它具有不受支持的 类型。仅查询源(即实现 IEnumerable)和查询运算符可以被解析

我调试了多达,我发现我无法将x.High和x.Low参数传递给parseIndexes()。也许我必须像parseindex(1010000)一样传递固定值。 在这种情况下,似乎无法在selectmany语句中使用方法


能给我一些帮助吗

不能在LINQ查询中使用
parseIndex(x.High,x.Low)
,因为LINQ无法识别和支持它。您需要另一种方法。

var datum=BitObjectList=。SelectMany
只是一个复制粘贴错误,还是这确实是您的实际代码?您提供的异常不能源于您问题中的代码。还有一件你没有给我们看的东西。请提供一个。我修复了我的问题,代码类似于dymanoid说这个异常不是来自您发布的代码。即使在我尝试它的时候,我也没有得到任何异常。你没有说你正在使用哪个LINQ提供程序,但是如果它是EF核心,那么可能是相关的,这是错误的<代码>解析索引在lambda中捕获,可以完美地用于LINQ查询。
var datum = bitObjectList.SelectMany(x => ParseIndices(x.High, x.Low)
                             .Select(z => new { 
                               Index = z,
                               Message = x.Message
                             }));