2017-02-13 5 views
-1

Hier ist mein Code.C# LINQ: DbFunctions.TruncateTime Wurf Fehler Diese Funktion kann nur von LINQ zu Entities aufgerufen werden

List<NPSEntity> Data = null; ; 
    using (var db = new NPSDbContext()) 
    { 
     Data = (from n in db.NPSDatas 
        orderby n.AddDate, n.CountryCode 
        where DbFunctions.TruncateTime(n.NPSDate) >= StartDate.Date && DbFunctions.TruncateTime(n.NPSDate) <= EndDate 
        select n).ToList(); 
    } 

    NPSData = Data.Select(n => new NPSEntity 
    { 
     NPSDate = DbFunctions.TruncateTime(n.NPSDate), 
     NPSAmount = n.NPSAmount, 
     AddDate = n.AddDate, 
     ModDate = n.ModDate, 
     UserID = n.UserID, 
     CountryCode = n.CountryCode 
    }).ToList(); 

    if (NPSData!=null) 
    { 
     CountryCodes = NPSData.Select(e => e.CountryCode).Distinct(); 
     CountryCount = CountryCodes.Count(); 
    } 

diese Linie zu werfen Fehler NPSDate = DbFunctions.TruncateTime(n.NPSDate),Diese Funktion ist nur von LINQ to Entities

mein Ziel aufgerufen werden kann, ist an der Zeit Teil von NPSDateNPSDate = DbFunctions.TruncateTime(n.NPSDate), warum ich DbFunctions.TruncateTime Funktion verwendet wird, zu entfernen.

sagen Sie mir, wie könnte ich dieses Problem beheben oder mir sagen, wie ich Zeit Teil von NPSDate beim Abrufen von Daten aus db entfernen könnte. meine NPSDate-Eigenschaft sieht wie public DateTime? NPSDate { get; set; } aus, deshalb kann ich nicht NPSDate.Date

verwenden, bitte führen Sie mich. Dank

Antwort

1

Der Fehler ist selbsterklärend genug, dass Sie nicht DbFunctions in jedem anderen Kontext verwenden können, sollte der Zusammenhang nur sein Linq to Entities und wenn Sie ToList() auf einem IQueryable<T> rufen, wird die Abfrage ausgeführt und die Ergebnisse werden hereingebracht Speicher, würden Sie Date Eigenschaft DateTime wenn Kürzen die Zeit hier benötigt wird, verwenden müssen, wie:

NPSData = Data.Select(n => new NPSEntity 
{ 
    NPSDate = n.NPSDate.Date, 
+0

ich nicht 'nnNPSDate.Date.Date' verwenden können, weil mein n.NPSDate Eigenschaft Nullable Type' public Datetime ? NPSDate {erhalten; einstellen; } 'So kann ich die Date-Eigenschaft nicht verwenden. – Mou

+0

dann: 'n.NPSDate.Value.Date', ist es besser, nach Null zu suchen:' n.NPSDate.HasValue? n.NPSDate.Value.Date? null ' –

Verwandte Themen