2014-06-17 148 views
4

我想創建一個的BindingList <>從LINQ查詢,但的BindingList <返回>不接受匿名類型匿名類型,下面是我的代碼綁定匿名類型創建的BindingList

var data = context.RechargeLogs.Where(t => t.Time >= DateTime.Today). 
      Select(t => new 
      { 
       col1 = t.Id, 
       col2 = t.Compnay, 
       col3 = t.SubscriptionNo, 
       col4 = t.Amount, 
       col5 = t.Time 
      }); 

var tmp = new BindingList<???>(data); 

在最後線通用參數放置什麼?

回答

1

如果您需要在其他地方使用此對象,我會建議使用dynamic或更好的方法來簡單創建您需要的對象作爲struct

public class RechargeLogData 
{ 
    public int Id { get; set; } 
    public string Company { get; set; } 
    public string SubscriptionNo { get; set; } 
    public string Amount { get; set; } 
    public string Time { get; set; } 
} 

var data = context.RechargeLogs.Where(t => t.Time >= DateTime.Today). 
     Select(t => new RechargeLogData() 
     { 
      Id = t.Id, 
      Company = t.Compnay, 
      SubscriptionNo = t.SubscriptionNo, 
      Amount = t.Amount, 
      Time = t.Time 
     }); 

var tmp = new BindingList<RechargeLogData>(data); 
+0

我去走這個源DataGrid綁定,當我更新RechargeLog,DataGrid能不更新我認爲 –

+0

你試過了嗎?更新'DataGrid'似乎是一個不同的問題。請隨時打開一個新的,我們可以幫助你。 – rhughes

+0

-1爲帶有字段的可變結構。綁定引擎不適用於字段。值類型不應被視爲直接替換引用類型。結構**必須是**不可變的。 – Dennis

-1

最低公共基礎類型您的數據共享。例如,對象如果是這樣的話。

var tmp = new BindingList<object>(data); 
5

你可以寫一個擴展方法:

static class MyExtensions 
{ 
    public static BindingList<T> ToBindingList<T>(this IList<T> source) 
    { 
     return new BindingList<T>(source); 
    } 
} 

,並使用它像這樣:

 var query = entities 
      .Select(e => new 
      { 
       // construct anonymous entity here 
      }) 
      .ToList() 
      .ToBindingList();