我有一个IQueryable<List<object>>
对象的结构只是一个x值和y值。
我还有另一个只包含双精度值的列表。
我的目标是根据列表中的double值拆分IQueryable,然后对每个拆分的部分进行区分。
例如:
可查询项:
var preparedQuery = new List<IReadOnlyList<object>>
{
new List<object> { 100, 10 },
new List<object> { 111, 20 },
new List<object> { 112, 30 },
new List<object> { 117, 60 },
new List<object> { 150, 80 },
new List<object> { 170, 90 },
new List<object> { 257.527, 200 },
new List<object> { 247.527, 100 }
}.AsQueryable();
列表:
var list = new List<double>
{
50, 100, 150, 200, 250, 300
}
这些部分现在应该是这样的(每个部分都包含对象,其中Queryable的x值为> =该部分的double值,而x-value <下一部分的double值):
部分为双精度值50(所有值在50-99之间):空
部分为双精度值100(所有值在100-149之间):
new List<object> { 100, 10 },
new List<object> { 111, 20 },
new List<object> { 112, 30 },
new List<object> { 117, 60 }
双精度值150部分(所有值在150-199之间):
new List<object> { 150, 80 },
new List<object> { 170, 90 },
部分为双精度值200:
new List<object> { 247.527, 100 }
部分为双精度值250:
new List<object> { 257.527, 200 }
双精度值300部分:空
在拆分这些值之后,应该在每个部分上执行一个distinct(),然后我希望将它们重新组合到一个Queryable中。 现在,我想查找一个Linq语句,它可以解决此问题。
答案 0 :(得分:0)
您可以将Linq的GroupBy扩展名与List.BinarySearch(T, IComparer)一起用于IQueryable源,以从排序列表中查找分组键。
答案 1 :(得分:0)
static void Main(string[] args)
{
var preparedQuery = new List<IReadOnlyList<object>>
{
new List<object> { 100, 10 },
new List<object> { 111, 20 },
new List<object> { 111, 20 },
new List<object> { 112, 30 },
new List<object> { 117, 60 },
new List<object> { 150, 80 },
new List<object> { 170, 90 },
new List<object> { 257.527, 200 },
new List<object> { 247.527, 100 }
}.AsQueryable();
var list = new List<double>
{
50, 100, 150, 200, 250, 300
};
var preparedQuery1 = new List<IReadOnlyList<object>>();
for (int i = 0; i < list.Count - 1; i++)
{
var s1 = preparedQuery
.Where(x => Convert.ToDouble(x[0]) >= list[i]
&& Convert.ToDouble(x[0]) < list[i+1] - 1)
.GroupBy(x1 => x1[0])
.ToList();
var s2 = s1.Distinct().ToList(); // not sure this :)
preparedQuery1.Add(s2);
}
}