Mam zapytanie, które powinno zwrócić sumę całkowitej liczby godzin podanych dla bieżącego tygodnia. Ten kod poniżej zwraca poprawną liczbę godzin, ale nie dla konkretnego użytkownika w bazie danych.Zapytanie Linq, pomieszane, gdzie klauzula w metodzie
public int reportedWeekTime(int currentWeek, string username)
{
var totalTime = (from u in context.Users
from r in context.Reports
from w in context.Weeks
from d in context.Days
where u.Id == r.UserId && r.weekNr.Equals(currentWeek) && r.Id == w.ReportId && w.DayId == d.Id
select d.Hour).DefaultIfEmpty(0).Sum();
return totalTime;
}
Pierwsza metoda zwraca liczbę 24, która jest poprawna, ale jak powiedziałem, nie dla konkretnego użytkownika.
Próbuję to zrobić, ale daje mi to 0 w zamian. Co ja robię źle?
public int reportedWeekTime(int currentWeek, string username)
{
var totalTime = (from u in context.Users
from r in context.Reports
from w in context.Weeks
from d in context.Days
where u.Id == r.UserId && r.weekNr.Equals(currentWeek) && r.Id == w.ReportId && w.DayId == d.Id && u.Username.Contains(username)
select d.Hour).DefaultIfEmpty(0).Sum();
return totalTime;
}
Może powinieneś ustawić nazwę użytkownika na właściwość w swojej klasie. Wiem, że WP7 Linq nie jest tak dobry z przekazanymi wartościami metody –
musisz użyć join http://code.msdn.microsoft.com/LINQ-Join-Operators-dabef4e9 – Habib
Przekazywanie nazwy użytkownika do metody takiej jak ta działa dla innego zapytania linq, którego używam, ale nie dla tego konkretnego. – rickard