2016-03-30 13 views
0

Ich versuche, eine LINQ-Abfrage zu schreiben, die die Daten in einer Tabelle mit dem Wert vergleicht, der vom Benutzer unterstellt wird. Der Zweck ist, dass einem Lieferanten ein Plan zugewiesen wird, der die Zeit enthält, die er für diesen Benutzer ausfüllen muss. Dies geschieht über das Planmodell und den Controller. Dann muss der Lieferant dort die tatsächliche Zeit angeben, die er gegen den Benutzer abgeschlossen hat. In diesem Stadium füllt der Lieferant eine Arbeitszeittabelle aus, also möchte ich überprüfen, ob die Zeit größer ist als die Zeit, die ihnen zugeteilt wurde.Asp.Net MVC5 Linq Abfrage zum Überprüfen der Daten in Tabelle

Ich habe versucht, die folgende Abfrage mit

var Time = db.Plans.Any(s => (s.CustomerId == timeSheet.CustomerId) && ((s.Monday <= plan.Monday))); 

Aber diese dosen't scheinen

Meine Models zu arbeiten, sind: Timesheet

public class TimeSheet 
{ 
    public int TimeSheetId { get; set; } 
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/M/yy}")] 
    public DateTime? WeekCommencing { get; set; } 
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/M/yy}")] 
    public DateTime? WeekEnding { get; set; } 
    [DataType(DataType.Time)] 
    public TimeSpan Monday { get; set; } 
    [DataType(DataType.Time)] 
    public TimeSpan Tuesday{ get; set; } 
    [DataType(DataType.Time)] 
    public TimeSpan Wednesday { get; set; } 
    [DataType(DataType.Time)] 
    public TimeSpan Thursday { get; set; } 
    [DataType(DataType.Time)] 
    public TimeSpan Friday { get; set; } 
    [DataType(DataType.Time)] 
    public TimeSpan Saturday { get; set; } 
    [DataType(DataType.Time)] 
    public TimeSpan Sunday { get; set; } 

    public int? CustomerId { get; set; } 
    public virtual Customer customer { get; set; } 

    public bool CompletedTimeSheet { get; set; } 

-Plan Modell:

public class Plan 
{ 
    [Key] 
    public int PlanId { get; set; } 
    [DataType(DataType.Time)] 
    [Range(typeof(TimeSpan), "00:00", "12:00")] 
    [DisplayFormat(DataFormatString = @"{0:hh\:mm\:ss}")] 
    public TimeSpan? Monday { get; set; } 
    [DataType(DataType.Time)] 
    public TimeSpan Tuesday { get; set; } 
    [DataType(DataType.Time)] 
    public TimeSpan Wednesday { get; set; } 
    [DataType(DataType.Time)] 
    public TimeSpan Thursday { get; set; } 
    [DataType(DataType.Time)] 
    public TimeSpan Friday { get; set; } 
    [DataType(DataType.Time)] 
    public TimeSpan Saturday { get; set; } 
    [DataType(DataType.Time)] 
    public TimeSpan Sunday { get; set; } 

    public int CustomerId { get; set; } 
    public int AgreementId { get; set; } 

    [HiddenInput(DisplayValue = false)] 
    public bool CustomerHasPlan { get; set; } 

Und die Arbeitszeittabelle Steuerung:

// GET: TimeSheets/Create 
    public ActionResult Create(int? ID) 
    { 
     if(ID == null) 
     { 
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
     } 
     TimeSheet model = new TimeSheet(); 
     // model.FullName = Name; 
     model.CustomerId = ID; 
     return View(model); 
    } 


    // POST: TimeSheets/Create 
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see http://go.microsoft.com/fwlink/?LinkId=317598. 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create([Bind(Include = "TimeSheetId,WeekCommencing,WeekEnding,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday,CompletedTimeSheet,CustomerId,Total")] TimeSheet timeSheet, Plan plan) 
    { 

     if (ModelState.IsValid) 
     { 
      var Monday_test = db.TimeSheets.Any(s => (s.CustomerId == timeSheet.CustomerId) && (s.Monday <= timeSheet.Monday)); 
      if (!Monday_test) 
      { 

       db.TimeSheets.Add(timeSheet); 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 

      } 

      else 
      { 
       return View("Error"); 
      } 
     } 

     return View(timeSheet); 
    } 

Hoffentlich kann jemand sehen, wo ich falsch liege.

Dank

+0

Wenn Sie sagen, „scheint nicht zu funktionieren“, was bedeutet das? Wird eine Ausnahme ausgelöst? Gibt es falsche Ergebnisse zurück? Was erwarten Sie genau und was passiert stattdessen? – anaximander

+0

Was meinst du mit "Es scheint nicht zu funktionieren"? Die Abfrage gibt keine korrekten Informationen oder eine Art Laufzeitfehler zurück? –

+0

Es fällt auf meine else-Anweisung, wenn ich weiß, dass der Wert wahr sein soll. Zum Beispiel hat montag den Wert 01:15 zugewiesen, aber wenn der Benutzer den Wert in 01:15 setzt, fällt er in die else-Anweisung. – markabarmi

Antwort

0

kann nicht wirklich sagen, was die Abfrage tut, aber bei Ihrer Anfrage, indem Sie es auf Ihre Modelle zu vergleichen, falsch geschrieben Sie Montag als „Maonday“.

Versuchen:

var Time = db.Plans.Any(s => (s.CustomerId == timeSheet.CustomerId) && ((s.Monday <= plan.Monday))); 
+0

@Neva sorry es sollte Montag geändert haben – markabarmi

Verwandte Themen