拆分逗号分隔的字符串并比较列表中的每个值

Split comma separated string and compare each value in a List

我有一个 csv 文件,格式如下:

此规则 sheet 加载到 List<DoctypeRule> 对象中,我使用此列表根据 RuleCode 和 RuleValue 获取 DocType 值。 DoctypeRule class 看起来像这样

public class DoctypeRule 
{
    public string doctype {get; set; }
    public string ruleCode {get; set; }
    public string ruleValue {get; set; }
}

现在,为了获取规则,我使用了 LINQ 并传递了一个参数。

DoctypeRule rule = new DoctypeRule();
rule = lsdoctypeRules.Find(r => r.docType == myparameter);

我还想获取具有相似规则的文档类型并存​​储在列表中。由于某些 RuleValue 将具有逗号分隔值,因此我无法获取具有类似规则的文档类型 示例:

string ruleCode = rule.ruleCode;;
string ruleValue = rule.ruleValue;
List<string> lsruleValues = ruleValue.Split(',').ToList();

现在用我使用的类似规则收集文档类型

var siblingDoctypes = lsdoctypeRules
                    .Where(r => r.ruleValue == ruleValue && r.ruleCode == ruleCode)
                    .Select(x => x.docType);

当 RuleValue 只有一个值时,这很适合获取文档类型。但是当有逗号分隔值时,我尝试了这样的事情

var siblingDoctypes = lsdoctypeRules                    
                    .Where(r => r.ruleValue.Split(',').ToList().Any(lsruleValues.Any().ToString()) && r.ruleCode == ruleCode)
                    .Select(x => x.docType);

如果 lsruleValues 有 4 个项目

Title Policy Schedule A,Title Policy Schedule B-Part I,Title Policy Schedule B-Part II,Title Policy

那么同级 Doctypes 应该是

的列表

Title Endorsement, Title Policy Schedule A,Title Policy Schedule B-Part I,Title Policy Schedule B-Part II.

好的,我想我已经全神贯注于您正在尝试做的事情了。您真正想要做的是检查 lsruleValues 是否包含任何规则值。我相信这会成功:

var siblingDoctypes = 
    lsdoctypeRules                    
    .Where(r => r.ruleCode == ruleCode &&
        r.ruleValue
        .Split(new char[] { ',' })
        .Join(
            lsruleValues,
            x => x,
            y => y,
            (x, y) => x)
        .Any())
    .Select(x => x.docType);

您可能也想考虑使用不区分大小写的字符串比较。