Ваша функция пытается вернуть IEnumerable , когда выполняемый оператор LINQ фактически возвращает IEnumerable , где T - это тип, сгенерированный во время компиляции. Анонимные типы не всегда являются анонимными, так как они принимают конкретный конкретный тип после компиляции кода.
Однако анонимные типы, поскольку они эфемерны до тех пор, пока не скомпилированы, могут использоваться только в той области, в которой они созданы. Чтобы удовлетворить ваши потребности в приведенном вами примере, я бы сказал, что самое простое решение - создать простую сущность, хранит результаты вашего запроса:
public class SearchItemResult
{
public string Text { get; set; }
public int ItemId { get; set; }
public string Path { get; set; }
}
public IEnumerable<SearchItemResult> SearchItem(int[] itemIds)
{
// ...
IEnumerable<SearchItemResult> results = from ... select new SearchItemResult { ... }
}
Однако, если ваша конечная цель не состоит в том, чтобы получить какой-либо объект, и вас интересует, скажем, Путь ... тогда вы все равно можете сгенерировать IEnumerable :
IEnumerable<string> lines = from ... select m.Groups[2].Value;
Надеюсь, это поможет прояснить ваше понимание LINQ, перечислимых и анонимных типов. :)