2

ストアド プロシージャの結果から List にキャストしようとしています.. timerangeResult -> Bookingの単一オブジェクトの明示的な (動作する) キャストを既に作成していますが、リストがありません..

コードは次のとおりです。

public static explicit operator List<Booking>(timerangeResult t)
{
List<Booking> bL = new List<Booking>();
IEnumerable<timerangeResult> tx = (IEnumerable<timerangeResult>) t;

foreach (timerangeResult tt in tx)
{
 Booking b = (Booking)tt;
        bL.Add(b);
}
//return bL;
//return new List<Booking>(bL);
//return new List<Booking>(IEnumerable < Booking > bL);
return bL;
// [NONE OF THESE WORK]
// ERROR:
// User-defined conversion must convert to or from the enclosing type (UNDERLINED: "explicit operator List<Booking>" line 1)
}

前もって感謝します!

4

3 に答える 3

3

関連する 2 つのタイプのいずれかでキャスト演算子を定義する必要があります。ソース オペランド タイプまたはデスティネーション オペランド タイプのいずれかです。

つまり、次のいずれかで演算子を定義する必要があります。

  • List<Booking>(それは不可能です)
  • ... またtimerangeResult

私の推測では、演算子を別の場所で定義したので、timerangeResult型に移動してみてください。

また、明示的な演算子は見つけにくいことに注意してください。それらがそこにあることを本当に知る必要があります。通常は、同じことを行うインスタンス メソッドを追加する方がはるかに優れています。つまり、次のようになります。

public class timerangeResult
{
    ...

    public List<Booking> ToBookingList()
    {
        ...
    }
}
于 2010-12-07T11:45:35.493 に答える
0

これは私が今得たものです(db.designer.cs)

public partial class timerangeResult
{

    private int _ID;

    private string _Login;

    private System.DateTime _Starts;

    private System.DateTime _Ends;

    private string _Delete;

    private byte _Notify;

// CUSTOM
//public static explicit operator List<Booking>(timerangeResult t)
public static List<Booking> ToBookingList(IEnumerable<timerangeResult> t)
{
    List<Booking> bL = new List<Booking>();

    foreach (timerangeResult tt in t)
    {
        Booking b = (Booking)tt;
        bL.Add(b);
    }
    return bL;
}
// CUSTOM END^

そして.. Booking.cs

public static List<Booking> Today(DateTime begin, DateTime end)
{
    try
    {
        dbDataContext db = new dbDataContext();

        IEnumerable<timerangeResult> bQ = from b in db.timerange(begin, end)
                             select b;
        List<Booking> bL = timerangeResult.ToBookingList(bQ);

        return bL;
    }
    catch (Exception)
    {
        throw;
    }
}

「クエリ結果を複数回列挙することはできません。」

于 2010-12-07T12:22:07.947 に答える
0

演算子はどの型で定義されていますか? その演算子はtimerangeResultクラスでのみ定義できます(List<Booking>他のオプションは制御外であるため)

于 2010-12-07T11:47:15.473 に答える