使用类似运算符从字符串集合中筛选集合



我有一个字符串集合:

["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)));

相关内容

  • 没有找到相关文章