Я новичок в Linq и Lambda. Сегодня я сам вошел в это. Имею опыт работы с Sql. Итак, после прохождения этого форума я наткнулся на LinqPad и каким-то образом сумел написать мой запрос Sql в Linq. Когда я пишу этот код Linq в Visual Studio, он работает нормально, без ошибок. Но требуется, чтобы я написал его на Lambda. Итак, я попытался использовать LinqPad для его преобразования, но он дает наши ошибки ниже
Рабочий код Linq в VS
public async Task<int> GetTotalStudentsAsync(int deanId, DateTime fromDate, DateTime toDate)
{
var result = from userBarSession in _unitOfWork.Read<UserBarSession>()
join deansStudent in _unitOfWork.Read<DeansStudent>() on userBarSession.Id equals deansStudent.UserBarSessionId
where deansStudent.DeanId == deanId && userBarSession.StartDate == fromDate && userBarSession.EndDate == toDate
select new
{
UserID = userBarSession.UserId
};
return result.ToList().Count();
}
Ошибка в LinqPad
«deanId» красного цвета показывает ошибку, поскольку «имя deanId не существует в текущем контексте».
«UserBarSessionId» красного цвета показывает ошибку как «ДеканыСтуденты не содержит определения для UserBarSessionId, и не удалось найти метод расширения UserBarSessionId, принимающий первый аргумент типа« DeansStudents »»
public class DeansStudent
{
[Key]
public int DeanId { get; set; }
[Key]
public int UserBarSessionId { get; set; }
public virtual User User { get; set; }
public virtual UserBarSession UserBarSession { get; set; }
}
public class DeansStudent { [Key] public int DeanId { get; set; } [Key] public int UserBarSessionId { get; set; } public virtual User User { get; set; } public virtual UserBarSession UserBarSession { get; set; } }@Sumitraj deanId объявлен как параметры
Если вы позволяете LinqPad создавать сам контекст данных, вы должны проверить, какие поля он создал и как они написаны.





deanId необходимо объявить в LINQpad либо как параметр метода в LINQpad, либо как переменную непосредственно перед этим. Ваш LINQpad, вероятно, не нашел бы fromDate или toDate, если бы это было частью вашего выражения там.
int deanId = 1;
DateTime fromDate = DateTime.Now.AddDays(-1);
DateTime toDate = DateTime.Now;
var result = from userBarSession in UserBarSession
join deansStudent in DeanStudents on userBarSession.Id equals deansStudent.UserBarSessionId
where deansStudent.DeanId == deanId && userBarSession.StartDate == fromDate && userBarSession.EndDate == toDate
select new
{
UserID = userBarSession.UserId
};
Простите. fromDate и toDate нет в моем текущем выражении. Как вы упомянули, я объявил UserId, и эта ошибка исчезла. но первый рядом с UserBarSessionId все еще существует. Выдает следующую ошибку. «DeansStudents» не содержит определения для «UserBarSessionId» и не может быть найден метод расширения «UserBarSessionId», принимающий первый аргумент типа «DeansStudents» (нажмите F4, чтобы добавить директиву using или ссылку на сборку)
@Vasalath Возможно ли, что у вас есть один класс с именем DeanStudent и другой с именем DeanStudents, где UserBarSessionId определен только в первом классе? В ваших примерах код VS использует DeanStudent, а запрос linqpad использует DeanStudents.
Опубликовать снимок класса
DeansStudentsи фрагмент кода, в котором объявленdeanId