我有一个字符串集合:
["1-","2-","4-"]
我也有一系列课程。
类别:
public class ProductionParameter
{
public string CompanyCode { get; set; }
public string UnitCode { get; set; }
public string ItemDescriptionLocal { get; set; }
public string ItemDescriptionEnglish { get; set; }
public string ConsumedItemDescriptionLocal { get; set; }
public string ConsumedItemDescriptionEnglish { get; set; }
public string LotCategory1Description { get; set; }
public string LotCategory2Description { get; set; }
public string LotCategory3Description { get; set; }
public string LotCategory1Code { get; set; }
public string LotCategory2Code { get; set; }
public string LotCategory3Code { get; set; }
public string LineCode { get; set; }
public string LineCodeDisplay { get; set; }
public string ItemUOM1 { get; set; }
public string ItemUOM2 { get; set; }
public string ConsumedItemUOM1 { get; set; }
public string ConsumedItemUOM2 { get; set; }
public string WorkShift { get; set; }
}
我想获取集合中的所有成员,其中LineCode属性在字符串集合中,但具有类似的操作。
示例:我想检查productionparmaters列表中的每个类,并仅保留LineCode属性所在的实例:
(LIKE '1-%' OR like '2-%' OR LIKE '4-%')
答案 0 :(得分:2)
您可以使用LINQ
来执行此操作:
假设stringCollection
是您帖子中的字符串集合,而lstProductionParameter
是您引用的对象列表集合。
编辑完问题后,我会给出两个可能的答案:
1)如果你需要检查字符串中的值或LineCode是否有任何值,你可以这样:
var lstProductionParameterFiltered = lstProductionParameter.Where(c => stringCollection.Any(s => c.Linecode.Contains(s)));
如果您使用StringCollection类区域(我更喜欢使用List或Array来执行此btw),您可以像这样强制转换StringCollection:
var lstProductionParameterFiltered = lstProductionParameter.Where(c => ((IEnumerable<string>)stringCollection).Any(s => c.Linecode.Contains(s)));
2)如果你需要检查是否有任何stringCollection有LineCode,你可以采取另一种方式:
var lstProductionParameterFiltered = lstProductionParameter.Where(c => stringCollection.Contains(c.Linecode));
答案 1 :(得分:0)
您可以在Contains
中使用Where
。这将比较整个字符串:
var filteredParameters = productionParameters
.Where(pp => strings.Contains(pp.LineCode));
如果您想检查它是否以它开头,您可以使用Any
+ string.StartsWith
:
var filteredParameters = productionParameters
.Where(pp => strings.Any(s => (pp.LineCode ?? "").StartsWith(s)));
注意这个&gt; ??
是null-coalescing operator我用来处理此属性可以null
的情况。然而,它会提出NullReferenceException
。
如果它不是List<string>
(正如我所假设的)而是来自配置文件的StringCollection
,则必须使用Enumerable.Cast
来支持LINQ:
var strings = stringCollection.Cast<string>();
var filteredParameters = productionParameters
.Where(pp => strings.Any(s => (pp.LineCode ?? "").StartsWith(s)));