[英]Entity Framework Linq two tables together with formatting
我對實體框架及其工作原理非常了解。 在大多數情況下,我可以使用以下返回列表的方法滿足要求,並且可以將其綁定到類似DropDownList的內容:
public static List<Data.Land> GetLandList()
{
List<Data.Land> ListEntities = null;
using (Data.languagesEntities context = GetDbContext())
{
ListEntities = (from ent1 in context.Land
orderby ent1.Land_sortering ascending, ent1.Land1 ascending
select ent1).ToList<Data.Land>();
}
return ListEntities;
}
但是對於另一個DropDownList,我需要將兩個表“ Linq”在一起,並從服務器表單元格中合並值以獲取想要顯示的所需文本。 我最終得到了我無法提取到方法中的這段令人討厭的代碼:
public class DropdownDisplay
{
public string value { get; set; }
public string Text { get; set; }
}
void Input_DropDownList_SelectCourse_SelectedItemChanged(object sender, BootstrapUI.UserControls.BootstrapFormControls.DropDownListItemEventArgs e)
{
int Cursus_ID = Convert.ToInt16(this.Input_DropDownList_SelectCourse.Value);
Data.languagesEntities context = Data._languagesEntities.GetDbContext();
var ListEntities = (from ent1 in context.Cursusdata
from ent2 in context.Cursus
where ent1.Cursus_ID == Cursus_ID
&& ent1.Cursus_ID == ent2.Cursus_ID
&& ent1.Cursusdata_gesloten == 0
orderby ent1.Cursusdata_startdatum ascending
select new
{
Cursusdata_ID = ent1.Cursusdata_ID,
Cursus_Code = ent2.Cursus_Code,
Cursusdata_einddatum = ent1.Cursusdata_einddatum,
Cursusdata_startdatum = ent1.Cursusdata_startdatum,
Cursusdata_tijden_NL = ent1.Cursusdata_tijden_NL,
Cursusdata_tijden_UK = ent1.Cursusdata_tijden_UK,
Cursus_ID = ent1.Cursus_ID
}
).ToList();
List<DropdownDisplay> List_DropdownDisplay = new List<DropdownDisplay>();
foreach (var Entity in ListEntities)
{
string newStartDatum = (Entity.Cursusdata_startdatum == null) ? "" : ((DateTime)Entity.Cursusdata_startdatum).ToShortDateString();
string newEindDatum = (Entity.Cursusdata_einddatum == null) ? "" : ((DateTime)Entity.Cursusdata_einddatum).ToShortDateString();
List_DropdownDisplay.Add(new DropdownDisplay()
{
value = Entity.Cursusdata_ID.ToString(),
Text =
Entity.Cursus_Code + " - " + newStartDatum +
" - " + newEindDatum + " - " + Entity.Cursusdata_tijden_NL
});
}
this.Input_DropDownList_SelectPeriod.DataSource = List_DropdownDisplay;
this.Input_DropDownList_SelectPeriod.DataValueField = "Value";
this.Input_DropDownList_SelectPeriod.DataTextField = "Text";
this.Input_DropDownList_SelectPeriod.DataBind();
}
我應該如何適當地做到這一點?
編輯:我應該澄清我的問題:t3chb0t的答案的確提取了一種方法中的解決方案,但我也想知道如何改善數據收集和處理。
非常感謝,雷米
我建議以下內容:
只需在第一個DDL中獲取Cursus_ID,然后為另一個DDL調用一個update方法:
void Input_DropDownList_SelectCourse_SelectedItemChanged(
object sender,
BootstrapUI.UserControls.BootstrapFormControls.DropDownListItemEventArgs e)
{
int Cursus_ID = Convert.ToInt16((sender as Input_DropDownList_SelectCourse).Value);
Update_Input_DropDownList_SelectPeriod(Cursus_ID);
}
使用幫助程序方法更新另一個DDL:
void Update_Input_DropDownList_SelectPeriod(int Cursus_ID)
{
List<DropdownDisplay> dropdownDisplayList = GetDropdownDisplayList(Cursus_ID);
Input_DropDownList_SelectPeriod.DataSource = dropdownDisplayList;
Input_DropDownList_SelectPeriod.DataValueField = "Value";
Input_DropDownList_SelectPeriod.DataTextField = "Text";
Input_DropDownList_SelectPeriod.DataBind();
}
使用另一個幫助程序方法獲取另一個DDL的數據:
List<DropdownDisplay> GetDropdownDisplayList(Int16 Cursus_ID)
{
Data.languagesEntities context = Data._languagesEntities.GetDbContext();
var ListEntities =
from ent1 in context.Cursusdata
from ent2 in context.Cursus
where ent1.Cursus_ID == Cursus_ID
&& ent1.Cursus_ID == ent2.Cursus_ID
&& ent1.Cursusdata_gesloten == 0
orderby ent1.Cursusdata_startdatum ascending
select new
{
Cursusdata_ID = ent1.Cursusdata_ID,
Cursus_Code = ent2.Cursus_Code,
Cursusdata_einddatum = ent1.Cursusdata_einddatum,
Cursusdata_startdatum = ent1.Cursusdata_startdatum,
Cursusdata_tijden_NL = ent1.Cursusdata_tijden_NL,
Cursusdata_tijden_UK = ent1.Cursusdata_tijden_UK,
Cursus_ID = ent1.Cursus_ID
};
List<DropdownDisplay> List_DropdownDisplay = new List<DropdownDisplay>();
foreach (var Entity in ListEntities.ToList())
{
string newStartDatum = (Entity.Cursusdata_startdatum == null) ? "" : ((DateTime)Entity.Cursusdata_startdatum).ToShortDateString();
string newEindDatum = (Entity.Cursusdata_einddatum == null) ? "" : ((DateTime)Entity.Cursusdata_einddatum).ToShortDateString();
List_DropdownDisplay.Add(new DropdownDisplay()
{
value = Entity.Cursusdata_ID.ToString(),
Text =
Entity.Cursus_Code + " - " + newStartDatum +
" - " + newEindDatum + " - " + Entity.Cursusdata_tijden_NL
});
}
return List_DropdownDisplay;
}
編輯:
在較短的查詢版本中,您可以立即創建DropdownDisplay
對象,而無需中間的匿名對象:
List<DropdownDisplay> GetDropdownDisplayList(Int16 Cursus_ID)
{
Data.languagesEntities context = Data._languagesEntities.GetDbContext();
var ListEntities =
from ent1 in context.Cursusdata
from ent2 in context.Cursus
where
ent1.Cursus_ID == Cursus_ID
&& ent1.Cursus_ID == ent2.Cursus_ID
&& ent1.Cursusdata_gesloten == 0
orderby ent1.Cursusdata_startdatum ascending
select new DropdownDisplay
{
value = ent1.Cursusdata_ID.ToString(),
Text = String.Format(
"{0}-{1}-{2}-{3}",
ent2.Cursus_Code,
ent1.Cursusdata_startdatum == null ? string.Empty : ((DateTime)ent1.Cursusdata_startdatum).ToShortDateString(),
ent1.Cursusdata_einddatum == null ? string.Empty : ((DateTime)ent1.Cursusdata_einddatum).ToShortDateString(),
ent1.Cursusdata_tijden_NL
)
};
return ListEntities.ToList();
}
但仍然最酷的方法是讓DropdownDisplay
類根據給定的數據為其屬性創建值:
public class DropdownDisplay
{
public DropdownDisplay(EntityType1 ent1, EntityType2 ent2)
{
value = ent1.Cursusdata_ID.ToString();
Text = String.Format(
"{0}-{1}-{2}-{3}",
ent2.Cursus_Code,
ent1.Cursusdata_startdatum == null ? string.Empty : ((DateTime)ent1.Cursusdata_startdatum).ToShortDateString(),
ent1.Cursusdata_einddatum == null ? string.Empty : ((DateTime)ent1.Cursusdata_einddatum).ToShortDateString(),
ent1.Cursusdata_tijden_NL
);
}
public string value { get; set; }
public string Text { get; set; }
}
那么查詢將更短:
List<DropdownDisplay> GetDropdownDisplayList(Int16 Cursus_ID)
{
Data.languagesEntities context = Data._languagesEntities.GetDbContext();
var ListEntities =
from ent1 in context.Cursusdata
from ent2 in context.Cursus
where
ent1.Cursus_ID == Cursus_ID
&& ent1.Cursus_ID == ent2.Cursus_ID
&& ent1.Cursusdata_gesloten == 0
orderby ent1.Cursusdata_startdatum ascending
select new DropdownDisplay(ent1, ent2);
return ListEntities.ToList();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.