2014-07-14 50 views
0

代碼:它突出了我可以告訴Linq找到shipto列並將另一個表上的datetimestamp更新一段時間的最底部,並告訴我不能隱式地將類型'System 。約會時間?'到'int?'而且我不確定如何繼續......不能隱式轉換類型'System.DateTime?'到'int?' C#Linq

var TestingLinq = (from a in db.shp_master 
        join b in db.shp_status on a.serialnbr equals b.serialnbr into b_join 
        from b in b_join.DefaultIfEmpty() 
        where 
           a.shipto == "1022a" && 
           a.status == "s" && 
           b.status == "s" && 
           a.shpreq == 0 
        group new {a, b} by new { 
           a.serialnbr, 
           a.trailer, 
           a.shipto 
        } into g 
        orderby 
           g.Key.serialnbr 
        select new RecieveTruck { 
           SerialNumber = g.Key.serialnbr, 
           TrailerNumber = (g.Key.trailer ?? "N/A"), 
           Shipped = g.Min(p => p.b.datetimestamp), 
           ETA = 
           g.Key.shipto == "1026" ? (System.DateTime?)Convert.ToDateTime(g.Min(p => p.b.datetimestamp)).AddMinutes(180) : 
           g.Key.shipto == "2020" ? (System.DateTime?)Convert.ToDateTime(g.Min(p => p.b.datetimestamp)).AddMinutes(195) : 
           g.Key.shipto == "2017" ? (System.DateTime?)Convert.ToDateTime(g.Min(p => p.b.datetimestamp)).AddMinutes(180) : 
           g.Key.shipto == "nor" ? (System.DateTime?)Convert.ToDateTime(g.Min(p => p.b.datetimestamp)).AddMinutes(180) : null 
        }); 
    return View(TestingLinq); 

讓我在標題中錯誤.... 我想這個SQL查詢轉換爲LINQ的:

SELECT a.serialnbr, ISNULL(a.trailer, 'N/A') AS 'trailer', MIN(b.datetimestamp) AS 'datetimestamp', 
      CASE WHEN a.shipto = '1026' THEN DATEADD(mi, 180, MIN(b.datetimestamp)) 
        WHEN a.shipto = '2020' THEN DATEADD(mi, 195, MIN(b.datetimestamp)) 
        WHEN a.shipto = '2017' THEN DATEADD(mi, 180, MIN(b.datetimestamp)) 
        WHEN a.shipto = 'nor' THEN DATEADD(mi, 180, MIN(b.datetimestamp)) 
        ELSE NULL END AS 'eta' 
      FROM shp_master AS a LEFT OUTER JOIN shp_status AS b ON a.serialnbr = b.serialnbr 
      WHERE a.shipto = '1022a' AND a.status = 's' AND b.status = 's' AND a.shpreq = 0 
      GROUP BY a.serialnbr, a.trailer, shipto 
      ORDER BY a.serialnbr  
+0

感謝您的編輯幫助Selman22 –

+0

這是一個編譯器錯誤,不是運行時錯誤,對嗎?這聽起來像一個,我只是想確定。 –

+3

問題是你有一個'int?'類型的屬性,並且你正試圖給它分配一個'datetime?'。看起來'RecieveTruck.Shipped'和'RecieveTruck.ETA'符合這個描述。他們是如何申報的? – Gabe

回答

1

在你發表評論,您指定RecieveTruck.ETAint?,但你這樣做

ETA = g.Key.shipto == "1026" ? (System.DateTime?)Convert.ToDateTime(g.Min(p => p.b.datetimestamp)).AddMinutes(180) : 
     g.Key.shipto == "2020" ? (System.DateTime?)Convert.ToDateTime(g.Min(p => p.b.datetimestamp)).AddMinutes(195) : 
     g.Key.shipto == "2017" ? (System.DateTime?)Convert.ToDateTime(g.Min(p => p.b.datetimestamp)).AddMinutes(180) : 
     g.Key.shipto == "nor" ? (System.DateTime?)Convert.ToDateTime(g.Min(p => p.b.datetimestamp)).AddMinutes(180) : null 

分配它,這將解決一個DateTime?。你需要選擇一個或另一個。它看起來像你在尋找ETA是一個DateTime?,但是,所以我只是改變該屬性類型,你應該很好去。

+0

我不想將ETA分配給那個......我應該把ETA = null,然後指定另一個變量來存儲日期時間? –

+0

如果這是你選擇的。我不太瞭解您的項目能夠告訴您如何爲其設計代碼。但是,如果你需要'ETA'類型爲'int?',並且你需要從這個直接獲得的信息 - 如果設置了,那麼你應該把它分成兩個獨立的屬性。 –

+0

是的,工作得很好......我只是設置了ETA = null ...然後在我的課堂上創建了一個新的變體,並將其添加到= ETA提供的例子中,並且它可以工作!謝謝 –

相關問題