#c# #asp.net #entity-framework #linq
#c# #asp.net #entity-framework #linq
Вопрос:
Я пытаюсь заполнить выпадающий список, используя EF, с DataValueField= Terr_TerritoryID
и DataTextField=Terr_Caption
В sql это команда:
select Terr_Caption,Terr_TerritoryID
from Territories
where Terr_TerritoryID in (-1342177274,-1073741819,-805306364,-536870909,-268435454,268435456,1)
когда я попытался написать этот sql с помощью EF, вот так:
var tc = (from t in db.Territories
where t.Terr_TerritoryID == -1342177274 amp;amp;
t.Terr_TerritoryID == -1073741819 amp;amp;
t.Terr_TerritoryID == -805306364 amp;amp;
t.Terr_TerritoryID == -805306364
select new
{
terCapt = t.Terr_Caption,
terID = t.Terr_TerritoryID
});
ddlTer.DataSource = tc.ToList();
ddlTer.DataValueField = "terID";
ddlTer.DataTextField = "terCapt";
ddlTer.DataBind();
когда я выполняю, в выпадающем списке ничего не появляется.
что происходит, кто-нибудь может помочь?
Ответ №1:
Ваш оператор в where должен быть OR
, а не AND
. Один и тот же идентификатор может быть как первым, так и вторым, и третьим и т.д. Значениями — но это может быть x или y или z .
from t in db.Territories
where t.Terr_TerritoryID == -1342177274 ||
t.Terr_TerritoryID == -1073741819 ||
t.Terr_TerritoryID == -805306364 ||
t.Terr_TerritoryID == -805306364
select new
{
terCapt = t.Terr_Caption,
terID = t.Terr_TerritoryID
};
Еще лучше создать список значений и использовать .Contains
:
var ids = new List<int> { -1342177274, -1073741819, -805306364, -805306364 };
from t in db.Territories
where ids.Contains(t.Terr_TerritoryID)
select new
{
terCapt = t.Terr_Caption,
terID = t.Terr_TerritoryID
};
Комментарии:
1. Большое вам спасибо, это устранило мою проблему
2. но почему второй sol лучше?
3. @FaresAyyad — всегда пожалуйста 🙂 Рад, что это решило вашу проблему
Ответ №2:
С помощью Lambda
var ids = new List<int> { -1342177274, -1073741819, -805306364, -805306364 };
var tc= db.Territories.where(x=>ids.Contains(x.Terr_TerritoryID))
.select new
{
terCapt = t.Terr_Caption,
terID = t.Terr_TerritoryID
};
.ToList();