我有一个以下格式的csv文件:
此规则表加载在 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-第二部分。
答案 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);
您也可以考虑使用不区分大小写的字符串比较。