2016-06-16 18 views
0

Ich habe meine EF-Modell wie folgt aus:Parameter in Konstruktoren für LINQ to Entities

public class foo 
    { 
     private static TimeZoneInfo INDIAN_ZONE = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time"); 
     DateTime indianTime = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, INDIAN_ZONE); 
     testData tD; 

     public foo(testData localtD) 
     { 
      this.tD = localtD; 
     } 

     public String Name { 
      get { return tD.Name; } 
      set { } 
     } 
     public Double dueInDays { 
      get { return (indianTime - tD.StartDate).TotalDays; } 
      set { } } 
    } 

und meine API-Methode

 [Route("api/getSingleData")] 
     [HttpGet] 

     public dynamic getTestData() 
     { 

      var dataset2 = (from recordset in db.testDatas 
          select new foo(recordset) 
          ); 
      return new { data = dataset2 }; 

     } 

in db.testDatas ist ich habe Datumsfeld, und ich will den Unterschied zurück zwischen dem aktuellen Datum und dem Startdatum.

Diese Datenbank ist mehr oder weniger abgeschlossen und ich kann keine Änderungen vornehmen, damit diese Anforderung auf der DB-Abfrageebene erfüllt wird. Was ist der grundlegende Fehler, die ich

für den Fehler mache

Nur parameterlos Bauer und initializers unterstützt werden in LINQ to Entities

Popup?

Und noch wichtiger, wie soll ich den Code ändern, um die Anforderung zu erfüllen?

Danke.

+0

Es sagt Ihnen genau, was das Problem ist. 'class foo' muss nur einen parameterlosen Konstruktor verwenden. –

+0

wahr. Was ist der Ausweg um dies zu erreichen? –

+0

Entfernen Sie den Parameter aus dem Konstruktor, und verwenden Sie stattdessen die Syntax der Objektinitialisierung. –

Antwort

0

Sie können nicht tun, was Sie versuchen zu tun. Dies ist so gut, wie du gehst zu bekommen ...

public class foo 
{ 
    private static TimeZoneInfo INDIAN_ZONE = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time"); 
    DateTime indianTime = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, INDIAN_ZONE); 
    string _name; 
    DateTime _startDate; 

    public foo() 
    { 
    } 

    public String Name { 
     get { return _name; } 
     set { _name = value; } 
    } 

    public Double dueInDays 
    { 
     get { return (indianTime - _startDate).TotalDays; } 
    } 

    public DateTime StartDate 
    { 
     get { return _startDate; } 
     set { _startDate = value; } 
    } 
} 

API-Methode: -

[Route("api/getSingleData")] 
[HttpGet] 
public dynamic getTestData() 
{ 
    var dataset2 = (from recordset in db.testDatas 
        select new foo 
        { 
         Name = recordset.Name, 
         StartDate = recordset.StartDate 
        }); 
    return new { data = dataset2 }; 
} 

Alternativ können Sie foo halten, wie und zu tun ....

[Route("api/getSingleData")] 
[HttpGet] 
public dynamic getTestData() 
{ 

    var dataset2 = (from recordset in db.testDatas 
        select recordset 
        ).ToList(); 

    return new { data = dataset2.select(r => new foo(r); }; 
} 
0

Haben Sie versucht, eine partielle Klasse zu verwenden, um ein berechnetes Feld zu erstellen. Etwas wie:

public partial class testDatas 
{ 
    public int duInDays 
    { 
     get 
     { 
      TimeZoneInfo INDIAN_ZONE = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time"); 
      DateTime indianTime = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, INDIAN_ZONE); 
      return (indianTime - StartDate).TotalDays; 
     } 
    } 
} 
Verwandte Themen