Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 拆分逗号分隔的字符串并比较列表中的每个值_C#_Linq_List_Split_Ienumerable - Fatal编程技术网

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

C# 拆分逗号分隔的字符串并比较列表中的每个值,c#,linq,list,split,ienumerable,C#,Linq,List,Split,Ienumerable,我有以下格式的csv文件: 此规则表加载在列表对象中,我使用此列表根据规则代码和规则值获取DocType值。DoctypeRule类如下所示 public class DoctypeRule { public string doctype {get; set; } public string ruleCode {get; set; } public string ruleValue {get; set; } } 现在,为了获取规则,我使用LINQ并传递一个参数 Do

我有以下格式的csv文件:

此规则表加载在
列表
对象中,我使用此列表根据规则代码和规则值获取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();
当RuleValue只有一个值时,这有助于获取doctype。但是当有逗号分隔的值时,我尝试了类似的方法

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-第二部分,产权政策

那么同级doctype应该是

所有权背书、所有权保单附表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);

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

虽然有一个警告字:性能将是0(n)-取决于出现的位置的大小,你应该寻找分裂和加入或使用<代码>哈什特集< /代码>。(谁的表现更好,但构建时间可能更差-你必须找到最佳点)。我不知道有一个不需要键选择器和结果选择器的
Join
重载。@juharr-你说得对。我不知道我在想什么。@JasonBoyd谢谢你的回答,但是这个Join没有键选择器和结果选择器,这可能是它给出“没有重载的Join需要1个参数”的原因问题。@JasonBoyd您对join()参数的编辑现在可以正常工作了。谢谢您是否知道您的方案可以正常化数据库?请阅读:
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);