1

我想从列表中选择多个字段。这是我的代码:

string[] NamesArray = Users
            .Select(i => new {  i.FirstName, i.LastName })
            .Distinct()
            .OrderByDescending(i => i.FirstName)
            .ToArray();

当我使用此代码时,错误是:'无法隐式转换类型'匿名类型:字符串名字,字符串姓氏 []' 到字符串 []' 我该怎么办???

4

1 回答 1

1

那是因为匿名选择所以当你选择喜欢(i => new { i.FirstName, i.LastName })它会给你一个对象列表,每个对象都有FirstNameLastName它不是字符串,不能是猫string

所以你应该做这样的事情:

string[] NamesArray = Users.OrderByDescending(i => i.FirstName)
         .Select(i => i.FirstName + " " + i.LastName)
         .Distinct()
         .ToArray();

如果您想选择匿名值,那么您无法将其转换string[]为最佳方式,var例如:

var NamesArray = Users.OrderByDescending(i => i.FirstName)
             .Select(i => new { i.FirstName , i.LastName})
             .Distinct()
             .ToArray();

但它也为您提供具有FirstNameLastName属性的对象列表。

但另一种解决方法是:

var NamesArray = Users.OrderByDescending(i => i.FirstName)
            .Select(i => new string[] { i.FirstName, i.LastName })
            .Distinct()
            .ToArray();
foreach(string[] str in NamesArray)
{
     string firstName = str[0];
     string lastName = str[1];
}

或者:

List<string[]> NamesArray = Users.OrderByDescending(i => i.FirstName)
        .Select(i => new string[] { i.FirstName, i.LastName })
        .Distinct().ToList();

或者:

IEnumerable<string[]> NamesArray = Users.OrderByDescending(i => i.FirstName)
            .Select(i => new string[] { i.FirstName, i.LastName })
            .Distinct();
foreach(string[] str in NamesArray)
{
    string firstName = str[0];
    string lastName = str[1];
}

无论如何,您不能将其直接转换为string[]手段NamesArraycan't be string[]

于 2018-01-13T09:35:56.240 回答