Я не мог воспроизвести это, я думаю, что это происходит до этого кода.Не могли бы вы материализовать ss перед фильтрацией, например, чтобы проверить, изолирован ли образец кода?
var itemsToFilter = ss.ToList();
string str = FilterAllSource;
if (!string.IsNullOrEmpty(str))
{
itemsToFilter = itemsToFilter.Where(it => (it.SourceCode.ToUpper()
.Contains(str.ToUpper())
|| it.SourceName.ToUpper()
.Contains(str.ToUpper())));
}
if (top > 0)
itemsToFilter = itemsToFilter.Take(top);
return itemsToFilter.ToList();
Я пробовал это с linq для объектов, работало нормально:
class Program
{
static void Main(string[] args)
{
var ss = new List<Dummy> { new Dummy
{
SourceCode = "m & m",
SourceName = "blabla"
}}.AsEnumerable();
string str = "m & m";
if (!string.IsNullOrEmpty(str))
{
ss = ss.Where(it => (it.SourceCode.ToUpper()
.Contains(str.ToUpper())
|| it.SourceName.ToUpper()
.Contains(str.ToUpper()))).ToArray();
}
var top = 2;
if (top > 0)
ss = ss.Take(top).ToArray();
Console.WriteLine(ss.Count());
}
}
public class Dummy
{
public string SourceCode { get; set; }
public string SourceName { get; set; }
}
Такжепопробовал с linq to sql, не тот же код, но должен вызвать ту же проблему (если была проблема):
class Program
{
static void Main(string[] args)
{
string str = "&";
using (var context = new DataClasses1DataContext())
{
var clients = context.Clients.Where(x => x.Code.Contains(str.ToUpper()));
clients = clients.Take(5);
Console.WriteLine(clients.Count());
}
}
}