[英]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.