Индекс элемента в IQueryable

220
09 ноября 2017, 02:58

Доброго времени суток, собственно сабж в заголовке. Пробовал юзать метод ToList(), но... но метод Contains у интерфейса возвращает true, а у получившегося List - false.

более подробно алгоритм: заюзал ORM для MSSQL, создаю элемент таблицы Log:

SQL.DeviceDataBase db = new SQL.DeviceDataBase(
  @"Data Source=" + Core.Settings.SQL_ServerName + @";
  Initial Catalog=" + Core.Settings.SQL_DeviceBaseName + @";
  Integrated Security=True");
var log = new SQL.Log();
log.Date = _time;
log.ArriveDate = _now;
log.DeviceID = _device;
log.ChannelID = channel;
log.UserID = user;
log.Message = _message;
log.Type = _type.ToString();
log.Hash = _hash;
db.Logs.InsertOnSubmit(log);
db.SubmitChanges();
return log;

далее получаю общий список текущих отображаемых Log:

SQL.DeviceDataBase db = new SQL.DeviceDataBase(
  @"Data Source=" + Core.Settings.SQL_ServerName + @";
  Initial Catalog=" + Core.Settings.SQL_DeviceBaseName + @";
  Integrated Security=True");
IQueryable<Log> logs =
    from lgs in db.Logs
    where (
        lgs.Date >= _date &&
        (string.IsNullOrEmpty(_device) || lgs.DeviceID == null || lgs.DeviceID.Contains(_device)) &&
        lgs.Message.Contains(_message) &&
        lgs.Type.Contains(_type))
    select lgs;
return logs.OrderBy(order, ascending).Take(Core.Settings.LogMaximumCount);

в результате получаю код вида:

SQL.Log item = SQL.SQLCommander.CreateLogItem(_time, _device, _channel, _user, _message, _type);
IQueryable<SQL.Log> items = GetItems(starttime, SDevice, SMessage, SType, TOrder, BEnd);

а потом необходимо добавить item в GUI. Я покумекал, постоянно перерисовывать все данные жутко, и хотелось бы просто добавить в таблицу (на самом деле без биндинга, просто StackPanel с толпой UserControl'ов) одну единственную строку, но опять таки, может быть много различных фильтров, сортировок и пр., по этому хотел узнать индекс добавляемого итема, и по этому же индексу произвести Insert в StackPanel. Но нихрена чтото так не работает:

bool c = items.Contains(item);                      //true
bool d = items.ToList<SQL.Log>().Contains(item);    //false
bool e = items.ToArray<SQL.Log>().Contains(item);   //false

а метод IndexOf есть только у List... в общем, у меня получилось сделать операцию только используя дикий костыль:

List<SQL.Log> lst= items.ToList<SQL.Log>();
SQL.Log item = lst.Where(x => x.ID == item.ID).FirstOrDefault();
index = lst.IndexOf(item1);

и у меня получилось это порядка 400 миллисекунд, хрень. кто виноват разберёмся потом, но второй извечный вопрос остаётся, что делать?) может у кого какие идеи есть?

READ ALSO
повторяется вывод из sql базы в dataGridView C#

повторяется вывод из sql базы в dataGridView C#

Каждый раз,при нажатии на кнопку обновить,выводятся данные из моей таблицы товаров повторно,даже те,которые уже существуютПодскажите,как...

208
Как корректно аутентифицироваться?

Как корректно аутентифицироваться?

После попытки скомпилировать код, появилось исключение (exception - 28P01) - смскриншот

180
Легенда графика ReportViewer (.NET 2005)

Легенда графика ReportViewer (.NET 2005)

Подскажите пожалуйстаМоя проблема состоит в том, что при построении графика в ReportViewer на

192
Параметры Swiper OpenCart

Параметры Swiper OpenCart

Добрый день, у меня такой вопрос, в OpenCart 3 сменили owl-carousel на Swiper и теперь половина параметров не работает, может под него другие параметры?...

390