拆分逗号分隔的字符串并比较列表

时间:2015-10-16 14:00:48

标签: c# linq list split ienumerable

我有一个以下格式的csv文件:

enter image description here

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

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);

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

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

现在收集使用类似规则的doctypes

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

当RuleValue只有一个值时,这很适合获取doctypes。但是当我用逗号分隔值时,我尝试了类似这样的东西

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

如果lsruleValues有4个项目

,预期的是什么
  

标题政策时间表A,标题政​​策时间表B-第一部分,标题政策   附表B第II部分,标题政策

然后兄弟Doctypes应该是

的列表
  

标题背书,标题政策时间表A,标题政​​策时间表   B-第一部分,标题政策附表B-第二部分。

1 个答案:

答案 0 :(得分:3)

好吧,我想我已经把头脑包裹在你想要做的事情上。您真正想要做的是检查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);

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