我需要在LINQ中使用UDF的帮助,它可以从固定点计算用户位置。LINQ查询使用从查询接收参数的UDF
int pointX = 567, int pointY = 534; // random points on a square grid
var q = from n in _context.Users
join m in _context.GetUserDistance(n.posY, n.posY, pointX, pointY, n.UserId) on n.UserId equals m.UserId
select new User() {
PosX = n.PosX,
PosY = n.PosY,
Distance = m.Distance,
Name = n.Name,
UserId = n.UserId
};
的GetUserDistance只是一个UDF,在一个TVP返回单行与来自pointX和尖尖的变量deisgnated点用户的距离,设计者生成了下列文件:
[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.GetUserDistance", IsComposable=true)]
public IQueryable<GetUserDistanceResult> GetUserDistance([global::System.Data.Linq.Mapping.ParameterAttribute(Name="X1", DbType="Int")] System.Nullable<int> x1, [global::System.Data.Linq.Mapping.ParameterAttribute(Name="X2", DbType="Int")] System.Nullable<int> x2, [global::System.Data.Linq.Mapping.ParameterAttribute(Name="Y1", DbType="Int")] System.Nullable<int> y1, [global::System.Data.Linq.Mapping.ParameterAttribute(Name="Y2", DbType="Int")] System.Nullable<int> y2, [global::System.Data.Linq.Mapping.ParameterAttribute(Name="UserId", DbType="Int")] System.Nullable<int> userId)
{
return this.CreateMethodCallQuery<GetUserDistanceResult>(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), x1, x2, y1, y2, userId);
}
当我尝试编译我得到
The name 'n' does not exist in the current context
乔恩的第二个答案非常完美,用“让”的条款 - 我试过失败但没有.Single()。非常感谢你。 @Wasp - 这和你的回答是一样的,但是我必须选择Jons repsonse,因为它是第一个,并且提供了几个scnearios来尝试,但是感谢你们俩 –