繁体   English   中英

实体框架Linq两个表以及格式

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM