Заполнить выпадающий список с помощью EF

#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();