2016-06-11 56 views
1

我有表,其中i選擇數據和有3列我合併或連接這些列..查詢和數據是串連數據綁定LINQ

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

     } 
    } 

當我嘗試這個錯誤發生

無法隱式轉換類型 'System.Collections.Generic.List<AnonymousType#1>' 到 'System.Collections.Generic.List<chart_project.tblRegion_Uni>'

任何解決方案?

+0

基本上,你的方法簽名說方法返回'List ',而實體返回匿名類型對象列表('return new {...}'),t帽子是什麼錯誤信息試圖告訴。 – har07

回答

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(); 
} 
+0

我在頁面上使用laod ??? var list =(from ta in tee.tblReg let data = ta.Region +「」+ ta.StartDate +「」+ ta.EndDate select new {data,ta.ID})。ToDictionary(x => x。 ID,x => x.data); –

+0

當我在頁面加載時使用此..出現以下錯誤無法轉換類型'System.Nullable'1鍵入'System.Object'。 LINQ to Entities僅支持投射實體數據模型基元類型。 –

+0

發生同樣的錯誤 –

0

試試這個,我還沒有測試的代碼

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

     } 
    } 

我認爲你必須明確說,要綁定的列...

+0

請檢查更新問題 –

+0

它是否工作,你有沒有嘗試過,我不能測試,我工作MVC框架 –

+0

我需要contenate也.. –

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個屬性的類[「ViewModel」])

對不起,如果這不爲你做:(

+0

我想連接區域開始日期和結束日期,並將其放在一列中。我如何解決問題 –

+0

啊,我陷入了困境。 Sorry..editing。 –

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

    } 
} 
+0

我認爲這個簡單的選擇數據..列表 list = tee.tblReg.ToList(); ..我想連接列 –

+0

@ user6408005看到更新的答案,您將需要指定您的DataTextFeild ID在ID中的名稱feild – Mairaj

+0

爲什麼你使用動態? –

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

     } 
    } 
+0

錯誤:錯誤無重載方法「的ToString」需要1個參數 錯誤無重載方法「的ToString」需要1個參數\t 錯誤無法將lambda表達式轉換爲類型'string',因爲它不是委託類型 –

+0

該死的...這是一個快速拍攝。但對象列表應該工作。 – shadow

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

嗯這個答案是否正確? –