【发布时间】: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))
}
结果很完美
但在 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]
谢谢你有美好的一天
【问题讨论】:
-
如果
.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