Очевидно, что разделитель в вашем searchString
является пробелом. Поэтому сначала вам нужно разделить searchString
на массив строк:
var searchStringList = searchString.Split(' ');
Затем вы можете проверить, содержит ли какой-либо из указанных столбцов все элементы в списке строк, например:
searchStringList.All(x => item.ItemID.ToUpper().Contains(x))
Наконец-то это будет примерно так:
var searchStringList = searchString.Split(' ');
IEnumerable<Item> query = from item in context.Items
where searchStringList.All(x => item.ItemID.ToUpper().Contains(x)) ||
searchStringList.All(x => item.ItemID2.ToUpper().Contains(x)) ||
searchStringList.All(x => item.ItemDesc.ToUpper().Contains(x))
orderby item.ItemClassID, item.ItemID ascending
select item;
return query.ToList();
Обновление
Как и в вашем комментарии, приведенный выше код жалуется на то, что локальная последовательность (searchStringList) не может использоваться в LINQ to SQL.
Одним из решений, которое я могу предложить для этого, является использование ToList()
, чтобы сначала получить все записи таблицы в памяти, а затем выполнить поиск по объекту. Однако следует помнить, что у него есть проблемы с производительностью.
var searchStringList = searchString.Split(' ');
IEnumerable<Item> query = from item in context.Items.ToList()
where searchStringList.All(x => item.ItemID.ToUpper().Contains(x)) ||
searchStringList.All(x => item.ItemID2.ToUpper().Contains(x)) ||
searchStringList.All(x => item.ItemDesc.ToUpper().Contains(x))
orderby item.ItemClassID, item.ItemID ascending
select item;
return query.ToList();