2010-03-11 112 views
11

基本上,我需要T-SQL相當於CONVERT(NVARCHAR(10), datevalue, 126)LINQ的2條SQL DateTime格式字符串YYYY-MM-DD

我已經試過:

  1. from t in ctx.table select t.Date.ToString("yyyy-MM-dd") 但將不支持例外
  2. from t in ctx.table select "" + t.Date.Year + "-" + t.Date.Month + "-" + t.Date.Day 但我不認爲這是一個可用的解決方案,因爲我可能需要能夠更改格式。

我看到的唯一選擇是使用 Convert.ToString(t.Date, FormatProvider),但我需要的格式提供,我不知道它的工作原理要麼

FormatProvider不workString.Format不工作( string.Format("{0:yyyy-MM-dd}", t.Date)也會拋出不支持的異常)。

+0

你試過了'.AsEnumerable'版本? – AxelEckenberger 2010-03-11 21:14:49

+0

我會在今天嘗試 – 2010-03-12 07:32:07

+0

下面的解決方案爲我工作。請在下面鏈接http://stackoverflow.com/questions/7999771/convert-datetime-to-a-formatted-string-inside-a-linq-to-sql-query – 2016-05-28 19:09:02

回答

6

假設 t.Date爲空( DateTime?),這可能是問題,請嘗試使用:

from t in ctx.table select (t.HasValue ? t.Date.Value.ToString("yyyy-MM-dd") : string.Empty); 

編輯:OK,第二次嘗試...

的問題是轉換爲SQL,它試圖將.ToString()轉換爲SQL表示,並失敗。所以,如果你應該做到以下幾點它應該工作:

(from t in ctx.table select t.Date).ToList().Select(d => d.ToString("yyyy-MM-dd"))

(from t in ctx.table select t.Date).AsEnumerable().Select(d => d.ToString("yyyy-MM-dd"))

AsEnumerable()將原先使用IQueryableIEnumerable,從而停止Linq中的情況下,以SQL的SQL(的產生)或提供者實現特定的IQueryable(例如Linq to SQL Provider)的任何其他transfromation。

請注意,在調用AsEnumerable()之前,您應該已完成想要轉換爲SQL並直接在數據庫上執行的任何操作。

+0

日期不可爲空。 另外,ToString不能在datetime上使用linq2sql。 – 2010-03-11 20:09:31

+0

這是行不通的,因爲rowcount非常高。 – 2010-03-11 20:30:34

+0

然後使用我插入的第二個選項。 – AxelEckenberger 2010-03-11 20:41:41

3

是否有理由在數據庫端執行轉換?每當遇到這種情況時,我傾向於讓數據庫給我原始數據,然後在應用程序中進行按摩和操作。根據對數據庫服務器的請求量和結果集的大小,我不希望將處理和響應時間限制在可以由客戶端處理的數據轉換。

+0

我需要運行一些字符串匹配: 我有一個字符串組成的'nvarchar'列和'datetime'列,我需要匹配它與另一個表中的列。 – 2010-03-11 21:12:21

+0

我可以看到結構嗎? – 2010-03-12 00:16:16

7

如果別人有這個問題,我通過創建一個單獨的函數來爲我做日期格式來解決這個問題。

我的LINQ看起來是這樣的:

from a in context.table 
where ... 
select new Class 
{ 
DateString = GetFormattedString(a.DateTimeObject) 
} 

而且GetFormattedString剛剛返回DateTimeObject.ToString( 「YYYY-MM-DD」); 這適用於我!

+0

我同意。儘管在查詢結果進入之後有幾種方法可以做轉換,但將可空結果傳遞給方法似乎是我最漂亮的解決方案。 +1 – 2011-08-11 12:18:23

+1

比僅僅爲了鑄造整個對象toList的目的好得多。 – Saulius 2014-03-06 07:21:51

0

嘗試創建一個對象類,您可以設置屬性並讓屬性爲您的視圖的值..設置從LINQ日期時間數據爲字符串,而不是日期時間..例如。

//Property class 
[DataContract()] 
public class Info 
{ 
[DataMember(Name = "created_date")] 
public string CreateDate; 
} 


//Controller 
var date = from p in dbContext.Person select p; 
CreateDate = Convert.ToDateTime(p.create_date).ToString("yyyy-MM-dd"); 

希望你能試試這個..我在過去的應用程序中有這個,這就是我所做的。

0

look no.3

var user = (from u in users 
        select new 
        { 
         name = u.name, 
         birthday = u.birthday.Value 
        }) 
        .ToList() 
        .Select(x => new User() 
        { 
         name = x.name, 
         birthday = x.birthday.ToString("yyyyMMdd") // 0埋めされるよ 
        }); 
-1

試試這個

var select = from s in db.Table 
      where s.date == someDate 
      select new 
      { 
       date = DateTime.Parse(s.date.ToString()).ToString("yyyy-MM-dd"), 
      }; 
+0

它實際上在linq2sql中工作,但不會在EF引發中工作LINQ to Entities無法識別方法'System.String ToString(System.String)'方法.. – Jack0fshad0ws 2016-10-11 03:56:56