我有一个EnumerableRowCollection,如下所示:
VendorCode | GroupType | Variance
01165 G .16
01165 G .16
01165 CH .16
01165 CH .18
07754 G .25
07754 G .25
07754 G .39
基本上,这是一个庞大的供应商代码列表,它们的组和价格差异。我需要编写一个查询来创建不同的列表供应商代码和组类型。然而,问题是,我需要评估与特定VendorCode / GroupType相关的所有差异,以查看它们是否完全相同 - 它们不是,我需要返回某种方式来表示该组具有“自定义“方差,否则它需要返回值(即:如果它们都是.16,则返回.16,如果有多个值,则返回”自定义“)
根据我上面列出的列表,结果看起来像这样。
VendorCode | GroupType | Variance
01165 G .16
01165 CH custom
07754 G custom
我可以毫不费力地获得VendorCode / GroupType的独特列表 - 这就是我目前所拥有的:
Dim distinctList = From q In query Select q.VendorCode, q.GroupType, (evaluated q.Variance here?) Distinct
(其中“query”是EnumerableRowCollection(Of(匿名类型)))
我不知道如何评估方差属性以获得我需要的结果 - 任何想法?
答案 0 :(得分:2)
我无法做VB,但在C#中我觉得你想要的东西是:
var query = from item in source
group item by new { item.VendorCode, item.GroupType } into g
select new { g.Key.VendorCode,
g.Key.GroupType,
Variance = ComputeVariance(g) };
...
string ComputeVariance(IEnumerable<YourItemType> group)
{
var distinctVariance = group.Select(x => x.Variance)
.Distinct();
using (var iterator = distinctVariance.GetEnumerator())
{
iterator.MoveNext(); // Assume this will return true...
var first = iterator.Current;
return iterator.MoveNext() ? "custom" : first.ToString();
}
}
假设你正在使用LINQ to Objects。如果您需要在LINQ to SQL等中执行此操作,我会采用稍微不同的方法。