LINQ新手问题2维集

时间:2011-09-02 18:06:57

标签: c# linq

我有一个LINQ查询,它使用整数来提取ID值:

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 }

我想要查询Roid的结果集并仅提取Tid值。

所以我想查询Roid = 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***

2 个答案:

答案 0 :(得分:6)

var tidsFromRoid = data.Where(x => x.Roid == 2387).Select(x => x.Tid);

这将返回一个仅包含Roid == 2387对的子序列,然后从该子序列中将每个元素投影到其Tid上。

请注意,如果您希望将其作为数组,请在:

之后调用.ToArray()
var arrayOfTids = tidsFromRoid.ToArray();

如果您想从一开始就这样做(因为您可能永远不会关心其他Roid),那么您可以提出原始查询:

var arrayOfTids = BaseData.Where(x => x.Roid == 2387).Select(x => x.Tid).ToArray();

答案 1 :(得分:0)

使用查询表达式语法,这也可以写成如下。这应该仍然产生相同的IL:

int desiredRepairOrderId = 2387;
var q = from e in data where e.Roid == desiredRepairOrderId select new {e.Tid};
var arrayOfResults = q.ToArray();