2012-01-23 12 views
5

Masaüstümden StartTime adında bir sütunda bir dizi DateTime değeri içeren tarihlerin listesini almaya çalışıyorum. Bu tablodaki her satır için "yyyy-AA-gg" biçiminde tarihlerin ayrı listede sonuçlanırLinq to Sql uzantıları içeren bir DateTime'ın Substring'i

SELECT DISTINCT SUBSTRING(CONVERT(VARCHAR(50), StartTime, 120), 1, 10) 

: My selefi aşağıdaki SQL kullanıyordu. Ben yaparak Linq-to-SQL nasıl çeviririm çalışıyorum şu:

query.Select(o => o.StartTime.ToString("yyyy-MM-dd")).Distinct() 

Ancak bu hatayla sonuçlanır "Yöntem 'System.string ToString (System.String)' SQL için desteklenen bir çeviri var ."

Bunu nasıl yapabilirim Linq-to-SQL kullanarak Substring/Convert?

Teşekkürler!

query.Select(o => o.StartTime.Date) 
    .Distinct() // Runs on the database 
    .AsEnumerable() // Convert to local sequence 
    .Select(date => date.ToString("yyyy-MM-dd")) // Runs on the client 

DateTime.Date mülkiyet (alt tarih kısmını çıkarır) LINQ SQL için desteklenir, böylece tarih-biçimlendirme dışındaki her şey veritabanı üzerinde çalışacak:

cevap

5

yerine dize işleme güvenmek, sen DateTime properties supported in LINQ to SQL üzerinden bu işleyebilir:

var results = query.Select(o => o.StartTime.Date).Distinct(); 

bir dize olarak bu görüntülemek isterseniz, daha sonra, sonuçları dönüştürmek için LINQ nesnelere kullanabilirsiniz:

var stringResults = results.AsEnumerable().Select(d => d.ToString("yyyy-MM-dd")); 
3

yapardım.

+0

Bu, tarih bölümünde değil, tam tarih-saat değerinde farklı olurdu. –

+0

@Jon: Hayır, yalnızca Tarih bölümünde farklı olurdu. Select yan tümcesinde DateTime.Date ile eşleşmeye dikkat edin. – Ani

+0

Evet, sadece onu yanlış okumuştum. –