2010-12-07 39 views
2

我想從一個存儲過程的結果轉換爲列表..我已經創建了一個單一對象的顯式(工作)轉換爲timerangeResult - >預訂,但我缺少一個列表..顯式列表轉換爲錯誤類型?

下面的代碼:

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

提前感謝!

+1

真的很奇怪的代碼,你把一個`timerangeResult`投給`IEnumerable `。 – 2010-12-07 11:47:05

回答

3

一個演員操作符需要在涉及的兩種類型之一中定義。源操作數類型或目標操作數類型中。

換句話說,你需要定義運營商無論是在:

  • List<Booking>(這是不可能的)
  • ...或timerangeResult

我的猜測是,你已經在其他地方定義操作員,請嘗試將其移至timerangeResult類型。

另外,請注意,顯式操作符很難發現,你真的需要知道他們在那裏。通常添加一個實例方法可以做同樣的事情,例如:

public class timerangeResult 
{ 
    ... 

    public List<Booking> ToBookingList() 
    { 
     ... 
    } 
} 
+0

哈里斯,謝謝你的快速回復。我在Booking.cs中定義了這段代碼。 – dezza 2010-12-07 11:47:30

0

運算符在什麼類型中定義?這種操作只能在timerangeResult類中定義(自List<Booking>,其他的選項,是你的控制之外)

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

現在,我得到:「的查詢結果不能枚舉不止一次。」