【问题标题】:how to join list array values如何加入列表数组值
【发布时间】:2020-06-10 04:36:07
【问题描述】:

如何对列表中的数组对象执行字符串连接。该数组可能包含空值。当尝试使用以下代码时仅显示不可为空的值

arrError.Where(x=>x.subject != null).Select(r1 =>
                                {
                                    r1.errors_path = String.Join("_", ((IList)r1.errors_path != null ? r1.errors_path : string.Empty).OfType<string>());
                                    return r1;
                                }
             )

输入列表结构为

name    age subject[]
user1   25  null
user12  26  null
user2   30  [s1,s2,s3,s4]
user3   28  [s1,s3]

运行 linq 查询后,我想获取以下格式的列表

name    age subject[]
user1   25  null
user12  26  null
user2   30  s1_s2_s3_s4
user3   28  s1_s3

【问题讨论】:

  • 您应该使用“Language-integrated-QUERY-Language”来修改项。说了这么多,是什么反对一些好的旧式循环?
  • 无法循环,
  • Eeeehm,循环怎么不可能?这对我来说听起来很奇怪。事实上,这与您的 linq 代码在后台执行的操作完全相同。
  • 你为什么还要关心nullString.Join 能够很好地处理数组中的空元素。
  • 您的OfType 将枚举从String.Join 返回的字符串。由于该字符串中的 none 元素本身是一个字符串,而是一个 char,因此您的结果字符串为空。

标签: c# asp.net .net linq


【解决方案1】:

如果value 为空,string.Join(String separator, params String[] value) 将抛出异常。那么你需要在使用前进行测试。

可以试试这个代码:

arrError.Select(r1 => new 
{ 
    Name = r1.name, 
    Age = r1.age,
    subject = r1.subject != null ? string.Join("_", r1.subject) : null 
});

我使用的测试:

// class like your structure
public class TestClass
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string[] Subject { get; set; }
}

// initializing the list
List<TestClass> testClasses = new List<TestClass>
{
    new TestClass{Name = "user1", Age=25, Subject = null},
    new TestClass{Name = "user132", Age=26, Subject = null},
    new TestClass{Name = "user2", Age=30, Subject = new string[]{"S1","S2","S3","S4"}},
    new TestClass{Name = "user3", Age=28, Subject = new string[]{"S1","S3"}},
};

// simulating your demand
var result = testClasses.Select(r1 => new 
{ 
    Name = r1.Name, 
    Age = r1.Age,
    Subject = r1.Subject != null ? string.Join("_", r1.Subject) : null 
});

【讨论】:

    【解决方案2】:

    试试这个

    var output= arrError.Select(a => new
                {
                    name = a.name,
                    age = a.age,
                    subject = String.Join("_", a.subject)
                }).ToList();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-30
      • 2017-03-03
      • 2014-02-15
      • 2020-06-27
      相关资源
      最近更新 更多