如何根据可选属性匹配项目

时间:2019-02-28 07:55:12

标签: c# dataset lookup

遇到以下情况:

我有两套。带有以下文件的“列表A”:ID,NAME,VALUES,其中ID和NAME的组合是唯一的,以及“列表B”,其中包含ID,NAME,OVERRIDEN_VALUES。

我要实现的是以最快的方式处理两个列表中的项目。

当前实施如下:

1)我进行了以下查找,其中的键可能只包含名称,只包含ID或两者都包含(并且可以重复)

stringArray2.All(x => stringArray1.Contains(x))

2)OverrideKey实现:

var lookup = overrides
            .ToLookup(item => new OverrideKey(item.NAME, item.ID));

3)然后,我有一个要匹配的项目列表,必须从覆盖查找中找到所有匹配项

public class OverrideKey
{
    public OverrideKey(string name= null, string id= null)
    {
        NAME = name ?? string.Empty;
        ID = id ?? string.Empty;
    }

    public string NAME { get; private set; }
    public string ID { get; private set; }

    public override bool Equals(object obj)
    {
        var otherKey = obj as OverrideKey;
        return !ReferenceEquals(otherKey, null) && 
                (NAME == otherKey.NAME|| ID == otherKey.ID);
    }

    public override int GetHashCode()
    {
        var hashCode = 17;
        hashCode = (hashCode * 37) ^ ID.GetHashCode();
        hashCode = (hashCode * 37) ^ NAME.GetHashCode();
        return hashCode;
    }
}

让我感到困扰的是,在第3点中,我必须为itemsToMatch中的每个单个项目创建密钥,很难相信它不能更有效地完成,但是不幸的是,我目前还不知道如何做。 / p>

更新 提供样本输入:

  • 样本替代(空=任何)

    foreach (var item in itemsToMach)
    {
         var matchingOverrides = overrides[new OverrideKey(name: item.NAME)]
                .Union(overrides[new OverrideKey(id: item.ID)])
                .Union(overrides[new OverrideKey(item.NAME, item.ID)]);
    
        [do stuff]
    }
    

“ ItemsToMatchWith”示例

PROPERTY    ORIGINAL_VALUE  OVERRIDE_VALUE  NAME                ID
A           16              13                                  SMH19
A           16              13                                  SMZ18
B                           CRE             BKP350LDN6589897    
B                           CCC                                 TABAU_USD_DFS_MR14
A           4               10              28905418            TABAU_USD_DFS_MR14
A           4               10              107029271           TABAU_USD_DFS_MR14
C           RES             1               106863631           XSNOREFOBL00

0 个答案:

没有答案