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

C# 使用linq在下拉列表中连接数据绑定,c#,linq,sql-server-2008,concatenation,dropdown,C#,Linq,Sql Server 2008,Concatenation,Dropdown,我有一个选择数据的表,其中有3列我合并或连接这些列。。查询和数据是 Select (Region+' '+cast(StartDate+''+EndDate as varchar)) as data,ID from tblRegion_Uni 资料 现在,我尝试使用linq在下拉列表中绑定此数据,但我希望上面的sql查询使用linq。。在linq查询下面,简单地选择数据,但我也希望在linq中连接 private List<tblRegion_Uni> getregion(

我有一个选择数据的表,其中有3列我合并或连接这些列。。查询和数据是

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

现在,我尝试使用linq在下拉列表中绑定此数据,但我希望上面的sql查询使用linq。。在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();

        }
    }
private List getregion()
{
使用(TrackDataEntities1 tee=new TrackDataEntities1())
{
返回(从tee.tblReg中的ta选择新的{ta.Region,ta.StartDate,ta.EndDate});
}
}
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!Page.IsPostBack)
{
regiondrop.DataSource=getregion();
regiondrop.DataTextField=“数据”;
regiondrop.DataValueField=“id”;
regiondrop.DataBind();
}
}
当我尝试时,会发生此错误

无法将类型'
System.Collections.Generic.List
'隐式转换为'
System.Collections.Generic.List
'


有解决方案吗?

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

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();

        }
    }
private List getregion()
{
使用(TrackDataEntities1 tee=new TrackDataEntities1())
{
返回(从tee.tblReg中的ta选择新的{ta.Region,ta.StartDate,ta.EndDate});
}
}
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!Page.IsPostBack)
{
regiondrop.DataSource=getregion();
regiondrop.DataTextField=“数据”;
regiondrop.DataValueField=“ID”;
regiondrop.DataBind();
}
}

我认为您必须明确指出,要绑定哪一列…

看起来您的错误为您提供了一个关于问题所在的可靠线索

您的页面/视图需要类型为
List
的模型,但您提供的是
List
,其中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个属性[“ViewModel”]的类)

很抱歉,如果这不适合您:(

试试这个

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();

  }
}

因为您正在处理数据库中的数据,并且您的数据具有特殊的可为空值,所以无法对其进行筛选,然后将其带到内存中,因此您需要首先将数据带到内存中,然后制作您想要的任何内容

创建具有所需属性的新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();
}
private List getregion()
{
使用(TrackDataEntities1 tee=new TrackDataEntities1())
{
var templast=tee.tblReg.ToList();
var list=(来自tempList中的ta)
让data=ta.Region+“”+ta.StartDate??DateTime.Now.ToString()+“”+ta.EndDate??DateTime.Now.ToString()
选择new{data,ta.ID}){
Id=x.Id,
Data=x.Data}).ToList();
退货清单;
}
}
如果(!Page.IsPostBack)
{
regiondrop.DataSource=getregion();
regiondrop.DataTextField=“数据”;
regiondrop.DataValueField=“Id”;
regiondrop.DataBind();
}
私有列表getregion()
{
使用(TrackDataEntities1 tee=new TrackDataEntities1())
{
返回(从tee.tblReg中的ta选择新的{Id=ta.Id,Data=ta.Region+''+ta.StartDate.ToString(“dd/MM/yyyyy HH:MM:ss”)+''+ta.EndDate.ToString(“dd/MM/yyyyy HH:MM:ss”)).ToList();
}
}
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!Page.IsPostBack)
{
regiondrop.DataSource=getregion();
regiondrop.DataTextField=“数据”;
regiondrop.DataValueField=“Id”;
regiondrop.DataBind();
}
}

请检查更新问题是否有效,您是否尝试过,我无法测试,我在MVC框架上工作,但我看不到绑定,连接绑定在哪里完成,代码代码代码看起来让我困惑,缺少一些东西,基本上,您的方法签名说方法返回
列表
,而主体实际返回匿名类型对象(
返回新的{…}
),这就是错误消息试图告诉你的。我想连接区域开始日期和结束日期,并将它们放在一列中..我在问题中解释了我是如何做的我认为这个简单的选择数据..List List List=tee.tblReg.ToList()我想连接columns@user6408005查看更新的答案您需要在ID feild中为您的
datatextfield
指定coulmn名称为什么使用动态?因为所选列表为匿名类型,无法转换为列表是的,我知道此代码工作正常,我已经测试过了?您尝试过吗?我在第la页使用此选项od???var list=(从tee.tblReg中的ta让数据=ta.Region+“”+ta.StartDate+“”+ta.EndDate选择新的{data,ta.ID})。ToDictionary(x=>x.ID,x=>x.data);当我在页面加载中使用时..出现以下错误,无法将类型“System”强制转换为类型“System.Object”。可为null的“1”强制转换为类型“System.Object”。LINQ to Entities仅支持强制转换实体数据模型基元类型。Region、StartDate或EndDate是否可以为null?字段类型是否可以为null?字段类型是否为StartDate(datetime,null)EndDate类型也相同,例如。(datetime,null)和region(varchar(50),null)错误:错误4方法“ToString”没有重载接受1个参数错误5方法“ToString”没有重载接受1个参数错误3无法将lambda表达式转换为类型“string”,因为它不是委托类型该死…这是一个快速解决方案。
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();
}
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();

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