Так что я использую 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 =(
}