将List <object>转换为List <myclass> c#

时间:2016-11-10 11:06:24

标签: c# linq devexpress

通过此代码,我获得了AspxGrid中所选行的列表。

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

现在我想执行以下操作之一。

  1. 使用linq
  2. 按用户标识过滤此对象列表,其中userid = 1
  3. 将此List<object>投放到List<Users>
  4. 我尝试过两种方法,但发生了异常。

      

    无法将类型为“System.Object []”的对象强制转换为类型   'CubeDataObject.Claims'。

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

    我也尝试了很多其他方法,但累了。

3 个答案:

答案 0 :(得分:4)

好像你有盒装object[]的列表。因此,您需要将其取消装箱,并通过相应的索引获取UserIdNameAddress的值。
这是一个例子:

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

答案 1 :(得分:3)

对于这个简单的尝试,Enumerable上的Cast-extension-method存在:

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

现在您可以轻松过滤:

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

答案 2 :(得分:2)

Linq有一种特殊的投射列表方法:

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

这应该有效,假设对象实际上可以转换为Users对象。