簡體   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