使用linq在下拉列表中连接数据绑定

时间:2016-06-11 06:27:29

标签: c# linq sql-server-2008 concatenation dropdown

我有表格,我选择数据,有3列我合并或连接这些列..查询和数据是

 Select (Region+'    '+cast(StartDate+''+EndDate as varchar)) as data,ID from tblRegion_Uni

数据

 data                           ID
UK    Mar 31 2128 11:59PM       1
US    Mar 31 2128 11:59PM       2
Paris Mar 31 2128 11:59PM       3

现在我尝试使用linq在下拉列表中绑定此数据但我想要在linq上面的sql查询..下面linq查询简单选择数据但我想在linq中连接

private List<tblRegion_Uni> getregion()
    {
   using(TrackDataEntities1 tee=new TrackDataEntities1())
         {
             return (from ta in tee.tblReg select new { ta.Region, ta.StartDate, ta.EndDate }).ToList();

         }

    }

 protected void Page_Load(object sender, EventArgs e)
    {
        if(!Page.IsPostBack)
        {
            regiondrop.DataSource = getregion();
            regiondrop.DataTextField = "data";
            regiondrop.DataValueField = "id";
            regiondrop.DataBind();

        }
    }

当我尝试发生此错误时

  

无法隐式转换类型&#39; System.Collections.Generic.List<AnonymousType#1>&#39;到&#39; System.Collections.Generic.List<chart_project.tblRegion_Uni>&#39;

任何解决方案?

6 个答案:

答案 0 :(得分:1)

因为您正在处理数据库中的数据,并且您的数据具有特殊的可空值,所以它无法过滤,然后将它们带到您的内存中,因此您需要首先将数据带入您的内存然后随意制作任何您想要的内容

使用您想要的属性创建一个新的ViewModel类:

public static class MyList{
    public static int Id {get; set;}
    public static string Data {get; set;}
}

然后在您的代码中,您希望获得合适的数据来制作此方法:

private List<MyList> getregion()
    {
       using(TrackDataEntities1 tee=new TrackDataEntities1())
         {
             var tempList=tee.tblReg.ToList();
             var list=(from ta in tempList
                      let data = ta.Region + " " + ta.StartDate??DateTime.Now.ToString() + " " + ta.EndDate??DateTime.Now.ToString() 
                      select new{data, ta.ID}).Select(x=> new MyList{
                      Id=x.ID,
                      Data=x.data}).ToList();
             return list;
         }

    }
if(!Page.IsPostBack)
{
         regiondrop.DataSource = getregion();
         regiondrop.DataTextField = "Data";
         regiondrop.DataValueField = "Id";
         regiondrop.DataBind();
}

答案 1 :(得分:0)

试试这个,我还没有测试过代码

var shortMonth = 'Jan';

我认为你必须具体说明,哪一列要绑定......

答案 2 :(得分:0)

看起来您的错误可以为您提供有关问题的确切线索。

您的网页/视图需要List<chart_project.tblRegion_Uni>类型的模型,但您提供的是List<T>,其中T是匿名类型。

通常这样的事情迫使你显式地转换变量,或者在下面的例子中我使用linq来绑定对象:

虽然我对此感觉不好...... 尝试将这一行代码更改为:

return (from ta in tee.tblReg select new { ta.Region, ta.StartDate, ta.EndDate }).
Select(x => new chart_project.tblRegion_Uni
{
data = $"{ta.Region.ToString()} {ta.StartDate.ToString() {ta.EndDate.Tostring()"
}).ToList();

我猜你的ViewModel变量,希望这会有所帮助

这可能无法正常工作......但理想情况下,您可以设置和/或控制要返回的对象(因此chart_project.tblRegion_Uni将是一个具有1个属性的类[&#34; ViewModel&#34;])

很抱歉,如果这样做不适合你:(

答案 3 :(得分:0)

试试这个

private dynamic getregion()
{
  using(TrackDataEntities1 tee=new TrackDataEntities1())
  {
    return (from ta in tee.tblReg select new { ID = ta.YourColumn,DisplayText = ta.Region+ta.StartDate.ToShortDateString()+ ta.EndDate.ToShortDateString() }).ToList();

  }

}

protected void Page_Load(object sender, EventArgs e)
{
  if(!Page.IsPostBack)
  {
    regiondrop.DataSource = getregion();
    regiondrop.DataTextField = "DisplayText";
    regiondrop.DataValueField = "ID";
    regiondrop.DataBind();

  }
}

答案 4 :(得分:0)

private List<Object> getregion()
    {
   using(TrackDataEntities1 tee=new TrackDataEntities1())
         {
             return (from ta in tee.tblReg select new { Id = ta.ID, Data = ta.Region+ " " +ta.StartDate.ToString("dd/MM/yyyy HH:mm:ss")+ " "+ta.EndDate.ToString("dd/MM/yyyy HH:mm:ss") }).ToList();

         }

    }

 protected void Page_Load(object sender, EventArgs e)
    {
        if(!Page.IsPostBack)
        {
            regiondrop.DataSource = getregion();
            regiondrop.DataTextField = "Data";
            regiondrop.DataValueField = "Id";
            regiondrop.DataBind();

        }
    }

答案 5 :(得分:0)

        **regiondrop.DataSource = getregion();
        regiondrop.DataTextField = "data";//it show in dropdown
        regiondrop.DataValueField = "ID";//pass value
        regiondrop.DataBind();**