【问题标题】:LINQ EF AND VS2017LINQ EF 和 VS2017
【发布时间】:2019-02-26 12:48:37
【问题描述】:

我写了一个查询并在 LINQPAD 上工作

from x in FacilityData
from y in FavInformation
where y.UserID == 1 && x.ID == y.FacilityID 
select new
{
    xID = x.ID,
    xDistrictName = (from y in _Ilcelers
                     where y.ID == x.DistrictID
                     select y.IlceAd).FirstOrDefault(),
    xName = x.Name,
    Value = (from o in Tags
             from p in  Table_tags
             where o.Prefix != null && o.Prefix == p._NAME && o.Facility == y.FacilityID
             orderby p.İd descending
             select new
             {
                 FType = o.TagType,
                 Name = o.TagsName,
                 Value = p._VALUE,
                 Time = p._TIMESTAMP

             }).Take(Tags.Count(h => h.Facility == y.FacilityID))
}

result

结果很完美

但在 Visual Studio 中不起作用,

Value = (from o in DB.Tags
    from p in DB.table_tags
    where o.Prefix != null && o.Prefix == p.C_NAME && o.Facility == 11
    orderby p.id descending
    select new
    {
        FType=o.TagType,
        Name = o.TagsName,
        Value = p.C_VALUE,
        Time = p.C_TIMESTAMP
    }).Take(Tags.Count(h => h.Facility == y.FacilityID))

它给出了一个错误。 我猜 .Take() 的部分不起作用,因为它是 linq to EF。

错误:

Limit must be a DbConstantExpression or a Db Parameter Reference Expression. Parametre name: count]

error image

谢谢你有美好的一天

【问题讨论】:

  • 如果.Take() 是一个常量值,比如 2,会发生什么?
  • .Take() 值不应该是常数,值是可变的。
  • 我的意思是,为了实验。如果您在整个查询之前尝试评估 Tags.Count(h => h.Facility == y.FacilityID) 会发生什么?
  • 不幸的是,当我这样做时,该值保持不变,但查询除外。有些位置有3个值,有些在2个。所以我需要从每个位置获取最后的值。
  • 等等,但是如果你想从Where() 拿走你所有的东西,你为什么还需要.Take()?此外,为什么您的 LINQPad 查询在 .Where() 中有一个 o.Facility == y.FacilityID,而 VS 具有一个常量值而不是 y.FacilityID?也许你应该取回它并删除.Take()

标签: linq


【解决方案1】:

不确定,但我会把它扔进去。如果你在谈论 linq to ef/sql,他们可能对 C# 一无所知。如果 take() 会成为问题,请尝试通过执行 .tolist() 来首先在本地获取选择结果。然后使用您的拍摄功能。

.ToList().Take(Tags.Count(h => h.Facility == y.FacilityID))

【讨论】:

  • 不!工作 :( 它给出了一个错误 => 限制必须是 DbConstantExpression 或 DbParameterReferenceExpression。参数名称:count
猜你喜欢
  • 2015-04-19
  • 2021-05-09
  • 2011-03-11
  • 1970-01-01
  • 2019-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多