Entity Framework, где пункт нечетное поведение - PullRequest
2 голосов
/ 15 ноября 2011

Так что я использую EF и пытаюсь сделать довольно простой вызов базы данных. Я сделал идентичный вызов для других объектов, и не понимаю этого поведения. Поведение состоит в том, что, если я соединяю два предложения в своем предложении where, я больше не получаю никаких результатов. Вот пример кода:

public List<Widgets> FindAll(long? relatedGadgetID)
using (myDBContext db = new myDBContext())
{
    return db.Widgets.Where(w => w.Deleted == false && w.GadgetID == relatedGadgetID).ToList();
    // This does not get any of the objects in the database
}

public List<Widgets> FindAll(long? relatedGadgetID)
using (myDBContext db = new myDBContext())
{
    return db.Widgets.Where(w => w.Deleted == false).Where(w => w.GadgetID == relatedGadgetID).ToList();
    // This does not get any of the objects in the database
}

public List<Widgets> FindAll(long? relatedGadgetID)
using (myDBContext db = new myDBContext())
{
    var x =  db.Widgets.Where(w => w.Deleted == false).ToList();
    return x.Where(w => w.GadgetID == relatedGadgetID).ToList();
    // This DOES!
}

Почему?

Редактировать: Исходя из комментариев, я попробовал обходной путь, и он все еще не работал. Вот что я попробовал, я сделал что-то не так?

public List<Widgets> FindAll(long? relatedGadgetID)
using (myDBContext db = new myDBContext())
{
    return db.Widgets.Where(w => w.Deleted == false && (relatedGadgetID == null ? w.GadgetID == null : w.GadgetID == relatedGadgetID)).ToList();
    // Still doesn't work =(
}

Edit2: пробовал другое исправление, но все равно не повезло.

public List<Widgets> FindAll(long? relatedGadgetID)
using (myDBContext db = new myDBContext())
{
    return db.Widgets.Where(w => (w.Deleted == false) && (w.GadgetID == relatedGadgetID || (relatedGadgetID == null && w.GadgetID == null))).ToList();
    // Still doesn't work =(
}

Edit3: пробовал Object.Equals, опять же, ничего.

public List<Widgets> FindAll(long? relatedGadgetID)
using (myDBContext db = new myDBContext())
{
    return db.Widgets.Where(w => w.Deleted == false && w.GadgetID.Equals(relatedGadgetID)).ToList();
    // Still doesn't work =(
}

1 Ответ

0 голосов
/ 15 ноября 2011

В моих попытках исправить это на раннем этапе я случайно изменил свойство класса, чтобы оно не обнулялось, в то время как столбец таблицы все еще был.Как только я понял это, первоначальные попытки все еще имели тот же результат, но обходной путь работал.Я закончил тем, что использовал этот первый обходной путь редактирования.Спасибо разбитое стекло!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...