2016-11-10 73 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);