我有這張桌子
CREATE TABLE Receipt
(
id INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
idcustom INT NOT NULL,
idstaff INT NOT NULL,
Daypayat DATE NOT NULL,
Timepayat TIME NOT NULL,
total INT NOT NULL
)
我想將 Daypayat 與 Timepayat 像 DateTime (dd/MM/yyyy hh:mm) 連接起來
uj5u.com熱心網友回復:
首先使用以下方法進行連接并將結果保存在SQL中的特定列中。
select cast(@date ' ' @time as datetime)
或者你可以這樣做來轉換,
select cast(@date as datetime) @time
然后在 C# 中使用 Datetime 結構來獲取結果。
uj5u.com熱心網友回復:
格式化是一個視圖/消費者關注的問題,它不應該是一個域的。物體應該公開 DayPayAt 和 TimePayAt 作為它們各自的型別。(日期時間和日期時間/時間跨度)當您查詢資料時,將其投影到 ViewModel/DTO,它可以將這些值組合成一個 PayAt DateTime,然后讓您的視圖格式符合您的要求。
因此,如果您的物體具有:
public DateTime DayPayAt { get; set; }
public Timespan TimePayAt { get; set; }
您的查詢將是:
var receipt = context.Receipts
.Where(/*conditions...*/)
.Select(x => new
{
// other fields or related data as needed.
x.Daypayat,
x.Timepayat
}).ToList() // Materialize our query...
.Select(x => new ReceiptViewModel
{
// Copy related data from results...
PayAt = x.DayPayAt.Add(x.Timepayat);
}).ToList();
然后在您的視圖中,您可以使用您想要的任何自定義或標準格式字串來格式化“PayAt”。@Model.PayAt.ToString("g")例如,將為您提供您所在地區的標準短日期/時間格式,或為特定內容使用自定義格式字串。
上面的例子做了一個雙投影,一個從我們的物體中獲取感興趣的原始欄位,第二個投影到視圖模型。這可能不是必需的,具體取決于 EF 是否可以執行DateTime.Add. (我不相信)
如果物體中的 Timepayat 映射到 DateTime 欄位(即 0000-00-00T14:20:00),則 PayAt 轉換將是:
PayAt = x.DayPayAt.Add(x.Timepayat.TimeOfDay);
如果您想回傳物體并處理它,另一種方法是在構成 DateTime 的 PayAt 的 Receipt 物體上使用未映射的屬性。該方法的警告是您需要記住不要在 Linq 運算式中參考任何未映射的屬性,因為它無法轉換為 SQL。
public class Receipt
{
// Mapped properties...
public DateTime Daypayat { get; set; }
public TImespan Timepayat { get; set; }
[NotMapped]
public DateTime PayAt
{
get { return Daypayat.Add(Timepayat); }
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/357981.html
