2016-11-10 70 views
-1

通過此代碼,我得到了AspxGrid中選定行的列表。演員表<object>至列表<myclass> c#

string[] fieldName = new string[] { "UserId", "Name", "Address" }; 
List<object> SelectedList = Grid.GetSelectedFieldValues(fieldName); 

現在我想執行下面的操作之一。

  1. 篩選其中userid = 1使用LINQ
  2. 角色此列表對象的用戶標識由該List<object>List<Users>

我曾嘗試下面的兩種方法,但異常發生。

無法投射'System.Object []'類型的對象來鍵入 'CubeDataObject.Claims'。

List<Users> mylist = (List<Users>)(Object)SelectedList; 
List<Users> listd = SelectedList.Select(n => (Users)n).ToList(); 

我也試過很多其他方法太多,但很累。

+0

你在哪裏得到異常? – Koneke

+0

首先感謝您的快速回復。它發生在我使用這種方法時。 List listd = SelectedList.Select(n =>(Users)n).ToList(); –

+0

恐怕爲什麼有些人倒了投我的問題。 :/ –

回答

4

看來你有盒裝object[]的名單。因此,您需要將其取出並通過其相應的索引獲取UserId,Name,Address的值。
這裏是例子:

List<Users> mylist = SelectedList 
    .Where(item => (int)((object[])item)[0] == 1) 
    .Select(item => 
    { 
     var values = (object[])item; 

     return new Users() 
     { 
      UserId = (int)values[0], 
      Name = (string)values[1], 
      Address = (string)values[2] 
     }; 
    }) 
    .ToList(); 
+0

工作完美。 :)謝謝@ nempoBu4捆綁 –

0

的LINQ有鑄造列出的特殊方法:

List<Users> mylist = SelectedList.Cast<Users>().Where(u => u.userid == 1).ToList(); 

這應該工作,假設對象實際上是強制轉換爲一個用戶對象。

+0

例外 無法投射'System.Object []'類型的對象以鍵入'Users'。 –

+0

在這種情況下,您的對象不是用戶類型。看看nempobu4的解決方案。 – Dennisch

1

對於這個簡單的TAST上Cast-extension-method存在Enumerable

var myList = SelectedList.Cast<User>(); 

現在您可以輕鬆過濾:

var result = myList.Where(x => x.userId == 1);