2016-03-17 4 views
0

У меня есть список int, который соответствует многим ID контракта. Идея заключается в том, что пользователь может добавить «избранное» Contract, чей идентификатор затем хранится в базе данных. Я извлекаю список для этого человека, а затем отфильтровываю DataGrid, поэтому отображаются только любимые Contract.Критерий предиката не работает при добавлении из списка

Если я добавлю жестко закодированный ID к списку Predicates, нет никаких проблем, например;

criteria.Clear(); 
if (favouritesCheckBox.IsChecked == true) 
{ 
    criteria.Add(new Predicate<ContractModel>(x => x.ID == 6966)); 
} 

Однако, когда я пытаюсь добавить от List<int>, который содержит IDs. Я делаю это так;

if (favouritesCheckBox.IsChecked == true) 
{ 
    for (int i = 0; i <= 48; i++) 
    { 
     if (favouriteContractList[i] != 0) 
     { 
      criteria.Add(new Predicate<ContractModel>(x => x.ID == favouriteContractList[i])); 
     } 
    } 
} 

Есть несколько вещей, из-за чего меня смущают. Во-первых, favouriteContractList.Count приводит к 50, однако я не могу сделать for (int i = 0; i <= 50; i++). Во-вторых, я распечатал favouriteContractList[i].ToString() на протяжении всего цикла, и, похоже, нет проблемы с хранением IDs. Однако, когда я проверяю свой ComboBox для фильтрации DataGrid, я остаюсь с пустой сеткой, когда я пытаюсь сделать это таким образом.

+0

Это на .NET 3.5? – sll

+0

не отвечает на ваш вопрос, но упростит и устранит некоторые проблемы. На первом месте используйте foreach (int num in favouriteContractList.Where (n => n! = 0)) {criteria.Add (new Predicate (x => x.ID == num);} – sll

+0

@ спасибо за вашу помощь, я добавлю его во избежание путаницы. – CBreeze

ответ

0

Попробуйте поставить favouriteContractList [я] в переменную, например, так:

if (favouritesCheckBox.IsChecked == true) 
{ 
    for (int i = 0; i <= 48; i++) 
    { 
     int id = favouriteContractList[i]; 
     if (id != 0) 
     { 
      criteria.Add(new Predicate<ContractModel>(x => x.ID == id)); 
     } 
} 

что-то делать с тем, как она задерживает здание это заставляет его не решить, как вы думаете, что это будет. Вероятно, он думает, что «мне» 49, когда он обходит его, фактически используя его. Это объясняет, почему вы не можете позволить 'i' получить выше 49 - это будет вне диапазона ваших 50 ints в списке.

Я только что заметил, что вы сказали, что у вас есть 50 элементов, и не может выполнить 'i < = 50', поскольку индексация начинается с 0, i = 50 - это 51-й элемент (которого нет).

+0

Хм еще не повезло, к сожалению, спасибо за ваш ответ. Я все еще могу указать идентификатор, как я продемонстрировал в мой вопрос, и он работает отлично, он просто не хочет добавлять идентификатор из списка ... – CBreeze

Смежные вопросы