【问题标题】:Linq to Lambda Conversion using LinqPad使用 LinqPad 将 Linq 转换为 Lambda
【发布时间】:2018-12-19 23:21:11
【问题描述】:

我是 Linq 和 Lambda 的新手。今天我自己走进了它。我有使用 Sql 的经验。所以在通过这个论坛之后遇到了 LinqPad 并以某种方式设法在 Linq 中编写了我的 Sql 查询。当我在 Visual Studio 中编写此 Linq 代码时,它工作正常,没有任何错误。但要求是我需要用 Lambda 编写它。所以我尝试使用 LinqPad 对其进行转换,但它给出了以下错误

在 VS 中工作的 Linq 代码

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”红色显示错误为“DeansStudents 不包含 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; } 
}

【问题讨论】:

  • 发布DeansStudents 类的快照和声明deanId 的代码段
  • 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 自己构建数据上下文,您应该检查它创建了哪些字段以及它们的拼写方式。

标签: c# sql linq lambda linqpad


【解决方案1】:

deanId 需要在 LINQpad 中声明,可以作为 LINQpad 中方法的参数或之前的变量。如果 fromDatetoDate 是您的表达式的一部分,您的 LINQpad 可能找不到。

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”的定义,并且找不到接受“DeansStudents”类型的第一个参数的扩展方法“UserBarSessionId”(按 F4 添加 using 指令或程序集引用)
  • @Vasalath 您是否有可能有一个名为 DeanStudent 的类和另一个名为 DeanStudents 的类,其中 UserBarSessionId 仅在第一个中定义?在您的示例中,VS 代码使用 DeanStudent 而 linqpad 查询使用 DeanStudents
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多