拆分逗号分隔的字符串并比较列表中的每个值
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);
您可能也想考虑使用不区分大小写的字符串比较。
我有一个 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);
您可能也想考虑使用不区分大小写的字符串比较。