3

以下の行でエラーが発生しています。

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

私は正確に何を間違っていますか??

4

3 に答える 3

6

問題は、new { value = ... }

交換:

Select(x => new {value=x.vehicleNumber+":"+x.shiftCompletedOn }).Cast<string>()

Select(x => x.vehicleNumber+":"+x.shiftCompletedOn)

そして、あなたはソートされています。はまったく必要ありませんCast<string>()

元のコードは、レコードごとに、value目的の文字列で呼び出されるメンバーを持つ匿名型の新しいインスタンスを作成します。2 番目のバージョンは文字列を作成するだけです。

ある意味では、これを試すのと同じです:

class Foo
{
    public string Bar {get;set;}
}
...
var foo = new Foo { Bar = "abc" };
string s = (string)foo; // doesn't compile
于 2013-03-07T11:56:00.767 に答える
5

はい、匿名型は文字列ではないため、これを置き換えます

 .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);
于 2013-03-07T11:55:07.427 に答える
3

これを交換

(x => new {value=x.vehicleNumber+":"+x.shiftCompletedOn }).Cast<string>()

これで

(x => String.Format("{0}\:{1}", x.vehicleNumber, x.shiftCompletedOn))

new { ... }匿名型のアイテムを作成しているときに、( Cast<string()) に明示的にキャストしようとするstringと、そのような変換が定義されていないため、適切な例外が発生します。

于 2013-03-07T11:55:39.753 に答える