无法转换列表
本文关键字:列表 转换 | 更新日期: 2023-09-27 18:02:48
我在下一行得到一个错误。
temp.day1_veh_p = string.Join(Environment.NewLine, day1.Where(x => x.plannedTriips == 1).Select(x => new {value=x.vehicleNumber+":"+x.shiftCompletedOn }).Cast<string>().ToArray());
错误信息
Unable to cast object of type '<>f__AnonymousType0`1[System.String]' to type 'System.String'.
列表day1的类型为
public class tripDetails
{
public string accountID { get; set; }
public string supplierName { get; set; }
public string supplierCode { get; set; }
public DateTime shiftFrom { get; set; }
public DateTime shiftTo { get; set; }
public int plannedTriips { get; set; }
public int actualTrips { get; set; }
public DateTime forDate { get; set; }
public string vehicleNumber { get; set; }
public string shiftCompletedOn { get; set; }
public class Comparer : IEqualityComparer<tripDetails>
{
public bool Equals(tripDetails x, tripDetails y)
{
return x.supplierCode == y.supplierCode;
}
public int GetHashCode(tripDetails obj)
{
return (obj.supplierCode).GetHashCode();
}
}
}
我到底做错了什么?
问题是new { value = ... }
替换:
Select(x => new {value=x.vehicleNumber+":"+x.shiftCompletedOn }).Cast<string>()
Select(x => x.vehicleNumber+":"+x.shiftCompletedOn)
然后排序。你根本不需要Cast<string>()
。
您的原始代码为每个记录创建了一个匿名类型的新实例,该实例具有一个名为value
的成员,该成员具有所需的字符串;第二个版本只创建字符串。
在某种程度上,这与尝试以下操作没有什么不同:
class Foo
{
public string Bar {get;set;}
}
...
var foo = new Foo { Bar = "abc" };
string s = (string)foo; // doesn't compile
是的,匿名类型不是字符串,所以替换这个
.Select(x => new { value = x.vehicleNumber + ":" + x.shiftCompletedOn })
.Select(x => x.vehicleNumber + ":" + x.shiftCompletedOn)
那么你可以使用string.Join
的查询(你不需要创建一个新的数组)
使用多行也很有帮助,它使你的代码更容易读:
var vehicles = day1.Where(x => x.plannedTriips == 1)
.Select(x => x.vehicleNumber + ":" + x.shiftCompletedOn);
string str = string.Join(Environment.NewLine, vehicles);
替换此
(x => new {value=x.vehicleNumber+":"+x.shiftCompletedOn }).Cast<string>()
由这个 (x => String.Format("{0}':{1}", x.vehicleNumber, x.shiftCompletedOn))
当你在做new { ... }
时,你正在创建匿名类型的项目,然后(Cast<string()
)尝试显式转换为string
,这种转换没有定义-你最终会得到适当的异常。