如何在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();
}
然后,有一个BIT128Object列表,其中包含1000多个元素。 我通过linq语句查询以得到每个索引的所有总数,像这样。
[Index] [Count] [Message]
0 120 hello
1 90 world
1 3 hi
2 3 hi
2 2 hhhhiiii
2 1 hiiiiii
12231151 1 new
12231151 1 new2222
105452984641 1 world
下面是我的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参数传递给ParseIndices()。似乎我必须像ParseIndices(10,10000)这样传递固定值。 在这种情况下,我似乎无法在selectmany语句中使用方法。
我可以帮忙吗?
答案 0 :(得分:0)
您不能在LINQ查询中使用ParseIndices(x.High, x.Low)
,因为LINQ无法识别和支持它。您需要另一种方法。