Ваша проблема здесь в том, что слово "Sales_units"
на самом деле содержит "Sales"
. Похоже, что ваши данные позволят сначала разделить строку по отметкам ,
, а затем посмотреть, равны ли подстроки, а не содержат ли они что-то.
Альтернативой может быть регулярное выражение для поиска начала или запятой на слово, за которым следует конец или запятая с некоторым пробелом между ними.
Я взял на себя смелость написать версию с разделением строк. Я оставлю версию регулярного выражения на ваше усмотрение.
class Program
{
class Ws {
public string XYZ;
public Ws(string xyz) { XYZ = xyz; } }
static void ConsoleWrite(string name, IEnumerable<Ws> list) {
Console.WriteLine(name);
foreach (var item in list)
Console.WriteLine($" '{item.XYZ}'"); }
static IEnumerable<Ws> Original(IEnumerable<Ws> objlist) {
string check = "Sales_units,ATL";
var res = objlist.Where(x => check.Contains(x.XYZ)).ToList();
return res; }
static IEnumerable<Ws> StringSplitVersion(IEnumerable<Ws> objlist) {
string[] checks = "Sales_units,ATL".Split(',');
return objlist.Where(x => checks.Any(c => c.Equals(x.XYZ))); }
static void Main(string[] args) {
var objlist = new List<Ws> { new Ws("Sales"), new Ws("Sales_units"), new Ws("Sales_Units_Per"), new Ws("ATL") };
ConsoleWrite("original", Original(objlist));
ConsoleWrite("stringsplit", StringSplitVersion(objlist)); }
}