C# 拆分逗号分隔的字符串并比较列表中的每个值
我有以下格式的csv文件: 此规则表加载在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
列表
对象中,我使用此列表根据规则代码和规则值获取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);