【问题标题】:c# LINQ how to properly pass a method into the select and return the valuec#LINQ如何正确地将方法传递给select并返回值
【发布时间】:2021-07-19 17:12:12
【问题描述】:

我有一个 LINQ 查询,我试图将一个方法传递给它,然后将结果返回给 select 语句。

没有抛出错误,但 UpdatedYesterday 不包含任何内容,即使 GetUpdatedValue(int r) 返回 yes or no。有没有办法在select语句中获取返回值?

例如

var result = (from r in reportOne
              join l in logs on r.id equals l.id into g
              select new TestReport
              {
                  UserID = r.UserID,
                  UpdatedDate = r.UpdatedDate,
                  UpdatedYesterday = g.Where(x => x.LogDate == r.WorkDate)
                                      .Select(x => GetUpdatedValue(x.updatedYesterday)).FirstOrDefault()

              }).ToList();
                      
                              
public string GetUpdatedValue(int r)
{
    var value = r > 0 ? "Yes" : "No";
    return value;
}

【问题讨论】:

  • 你确定LogDate WorkDate 完全一样吗?甚至排在第二位?我建议删除这个Where(x => x.LogDate == r.WorkDate) 并测试它。
  • 没有更多的上下文,除了推测之外,真的不可能做任何事情。 minimal reproducible example 将使我们更容易为您提供帮助。 (而且我怀疑这需要加入......)
  • 在 GetUpdatedValue 之后执行,因为它无论如何都无法转换为 sql ...假设你不尝试这样做,那么还要确保 updatedYesterday 不能为空
  • @Seabizkit: 如果是 Linq-To-Sql/Entities 他会得到一个错误
  • 你能发布reportOne和日志类吗?

标签: c# entity-framework linq .net-core entity-framework-core


【解决方案1】:

我认为你的 WorkDate 不能和 LogDate 一样,最好只使用日期差异,没有时间。 试试这个

var result = (from r in reportOne
              join l in logs
 on r.Id equals l.Id  into lg
from l in lg.DefaultIfEmpty()
where EF.Functions.DateDiffDay(r.WorkDate, r.LogDate )==0
  select new TestReport
  {
    UserID = r.UserID,
    UpdatedDate = r.UpdatedDate,
     UpdatedYesterday=l.UpdatedYesterday > 0 ? "Yes" : "No"
   }).ToList();

但如果由于某些原因您仍想使用您的方法,最简单的方法是在 TestReport 中添加一个额外的属性

public  UpdatedYesterdayInt int {get; set;}

代码

var query=
.....
select new TestReport
  {
    UserID = r.UserID,
    UpdatedDate = r.UpdatedDate,
     UpdatedYesterdayInt=l.UpdatedYesterday
   }).ToList();

var result=query.ForEach(i=> i.UpdatedYesterday=GetUpdatedValue(i.UpdatedYesterdayInt));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 2015-03-04
    • 1970-01-01
    相关资源
    最近更新 更多