【问题标题】:Pass string variable as query parameter to LINQ query将字符串变量作为查询参数传递给 LINQ 查询
【发布时间】:2016-10-27 11:17:04
【问题描述】:

我试图通过 MVC 控制器中的 POST 请求将字符串变量传递到 LINQ 查询中。我在动态 LINQ 示例上尝试了多种变体(这似乎是主要推荐的方法。

预期结果

一个 IEnumerable 数组,其中包含基于 ng-repeat 中显示的指定 SiteID 的结果。

非动态 LINQ 查询

public IEnumerable<SpecialsViewModel> GetAllSpecialsBySiteID(string siteID)
{
    var query = (from s in _calcContext.Specials
    where s.SiteID == siteID
    select new SpecialsViewModel
    {
        ID = s.ID,
        SiteID = s.SiteID,
        Title = s.Title,
        Description = s.Description,
        Price = s.Price,
        Position = s.Position,
        EffectiveDate = s.EffectiveDate,
        CreationDate = s.CreationDate,
        Status = s.Status,
        LastUpdated = s.LastUpdated
    }).ToList();

    return query;
}

结果

没有返回结果。

动态 LINQ 查询

public IEnumerable<SpecialsViewModel> GetAllSpecialsBySiteID(string siteID)
{ 
    var query = (from s in _calcContext.Specials
    select new SpecialsViewModel
    {
        ID = s.ID,
        SiteID = s.SiteID,
        Title = s.Title,
        Description = s.Description,
        Price = s.Price,
        Position = s.Position,
        EffectiveDate = s.EffectiveDate,
        CreationDate = s.CreationDate,
        Status = s.Status,
        LastUpdated = s.LastUpdated
    });

    query = query.Where("SiteID=@0", siteID);

    return query;
}

结果

没有返回结果。

【问题讨论】:

  • 如果您删除 where 子句,它是否返回任何结果?
  • 你能确认当在数据库中选择这个时,where 会返回任何记录吗?
  • 是的,我可以确认,当我在数据库查询中提供两个字符串时,它会按预期返回结果,并且如果我省略 where 子句,还会返回整个结果集。

标签: c# linq


【解决方案1】:

如果您的两个 linq 查询都未能返回结果,我怀疑您传入的值不是您所期望的。尝试将 siteID 的值硬编码为已知的良好值,看看是否可行。 (我更喜欢第一个查询,但两者都很好)

【讨论】:

  • 我可以在浏览器开发人员工具中看到发布的值,但是当我查看函数断点处的值时,它为空。
  • 那是你的问题,不是 linq
  • 这就是为什么我试图重写 linq 以使其正常工作。我也尝试将属性添加到 ViewModel。
【解决方案2】:

尝试将 siteID 转换为 int 并传递给 where 子句 例如:where s.SiteID == (int32?)siteID

【讨论】:

  • siteID 是 2 个字符的长度值,因此不能是 int。
猜你喜欢
  • 2017-11-15
  • 2012-06-25
  • 2014-08-23
  • 1970-01-01
  • 2015-12-25
  • 2016-08-27
  • 1970-01-01
  • 1970-01-01
  • 2016-08-13
相关资源
最近更新 更多