我有一个字符串集合:
["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属性在字符串集合内但具有类似操作的集合的所有成员。
示例:我想检查productionparameters列表中的每个类,只保留LineCode属性为的实例:
(LIKE '1-%' OR like '2-%' OR LIKE '4-%')
您可以使用LINQ
来做到这一点:假设stringCollection
是来自您的帖子的字符串集合,lstProductionParameter
是您引用的对象列表集合。
在你的问题编辑之后,我将给出两个可能的答案:
1)如果你需要检查值或LineCode是否有字符串中的任何值,你可以这样做:
var lstProductionParameterFiltered = lstProductionParameter.Where(c => stringCollection.Any(s => c.Linecode.Contains(s)));
如果你使用StringCollection类(我更喜欢使用一个列表或数组),你可以像这样转换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));
可以在Where
中使用Contains
。这将比较整个字符串:
var filteredParameters = productionParameters
.Where(pp => strings.Contains(pp.LineCode));
如果你想检查它是否以它开头,你可以使用Any
+ string.StartsWith
:
var filteredParameters = productionParameters
.Where(pp => strings.Any(s => (pp.LineCode ?? "").StartsWith(s)));
注意,这个> ??
是空合并运算符,我用它来处理这个属性可以是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)));