Я не думаю, что EF поддерживает перевод строки в DateTime или наоборот.
На мой взгляд, у вас есть два варианта, в зависимости от формата даты в строковом поле:
Если формат довольно прост, сравнения строк может быть достаточно:
// Convert the boundaries to strings first
// TODO: Set the ToString format option to match the database format
string startDateAsString = startdate.ToString("yyyyMMdd");
string endDateAsString = enddate.ToString("yyyyMMdd");
// Query based on string comparison
var memberl = from v in abc.visits
join m in abc.members on v.member_Id equals m.member_Id
where v.visit_Date.CompareTo(startDateAsString) >= 0 &&
v.visit_Date.CompareTo(endDateAsString) <= 0
group m by new { m.member_Firstname,
m.member_Lastname, m.member_Id } into g
orderby g.Count()
select new
{
numVisits = g.Count(),
firstname = g.Key.member_Firstname,
lastname = g.Key.member_Lastname
};
Если строковое представление даты является более сложным и простое сравнение строк не может помочь, вы можете подумать о создании view
в таблице visits
, которая выполняет преобразование для вас на уровне базы данных:
CREATE VIEW VisitsWithDate (MemberId, VisitDate)
AS
SELECT MemberId, Convert(datetime, VisitDate, 112) -- For instance
FROM Visits
Затем следует импортировать это представление в вашу модель данных. Возможно, вам понадобится немного магии, чтобы отношения заработали.
Надеюсь, это поможет.