二维集的LINQ新手问题
本文关键字:LINQ 新手 问题 二维 | 更新日期: 2023-09-27 18:07:29
我有一个用整数提取ID值的LINQ查询:
var data = from s in BaseData
select new { s.Roid, s.Tid};
? data.ToArray()
{<>f__AnonymousType0<int,int>[14]}
[0]: { Roid = 2384, Tid = 1 }
[1]: { Roid = 2384, Tid = 2 }
[2]: { Roid = 2384, Tid = 3 }
[3]: { Roid = 2385, Tid = 4 }
[4]: { Roid = 2385, Tid = 5 }
[5]: { Roid = 2385, Tid = 6 }
[6]: { Roid = 2386, Tid = 1 }
[7]: { Roid = 2386, Tid = 3 }
[8]: { Roid = 2386, Tid = 6 }
[9]: { Roid = 2386, Tid = 7 }
[10]: { Roid = 2387, Tid = 1 }
[11]: { Roid = 2387, Tid = 2 }
[12]: { Roid = 2387, Tid = 4 }
[13]: { Roid = 2387, Tid = 9 }
我想做的是查询oid的结果集,并仅提取Tid值。
所以我想查询id = 2387的数据,它将返回1,2,4,9,我想将其转换为数组。
这样的事情可能吗?
// ***Edit***
var items = data.ToArray().Where(s => s.RepairOrderId == 2387);
// gets me closer, but I still only want the Tid's
// ***Edit***
var tidsFromRoid = data.Where(x => x.Roid == 2387).Select(x => x.Tid);
这将返回一个子序列,该子序列只包含Roid == 2387
的对,然后从该子序列中,它将每个元素投影到它的Tid
上。
注意,如果你想把它作为一个数组,在后面调用.ToArray()
:
var arrayOfTids = tidsFromRoid.ToArray();
如果您想从一开始就这样做(因为也许您不会关心其他Roid
s),那么您可以进行原始查询:
var arrayOfTids = BaseData.Where(x => x.Roid == 2387).Select(x => x.Tid).ToArray();
使用查询表达式语法,也可以这样写。这应该仍然会产生相同的IL:
int desiredRepairOrderId = 2387;
var q = from e in data where e.Roid == desiredRepairOrderId select new {e.Tid};
var arrayOfResults = q.ToArray();