我有一个csv文件,格式如下:
c# - 分割逗号分隔的字符串并比较列表中的每个值-LMLPHP
此规则表加载在List<DoctypeRule>对象中,我使用此列表根据规则代码和规则值获取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将具有逗号分隔的值,因此我无法获取具有类似规则的doctype
例子:
string ruleCode = rule.ruleCode;;
string ruleValue = rule.ruleValue;
List<string> lsruleValues = ruleValue.Split(',').ToList();

现在收集与我使用的规则相似的doctype
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-第二部分,产权政策
那么兄弟文档类型应该是
所有权背书,所有权保单附表A,所有权保单附表
B-第一部分,所有权保险单附表B-第二部分。

最佳答案

好吧,我想我已经完全明白了你的意思。您真正想做的是检查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);

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

关于c# - 分割逗号分隔的字符串并比较列表中的每个值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33172366/

10-11 18:12