我的应用程序是客户端-服务器设置,客户端向服务器询问给定区域中的对象。它将向服务器发送 x 和 y 坐标以及半径。然后,服务器必须在 SQL Server 数据库中查询指定区域中的对象。在数据库中,对象由它们的 x 和 y 坐标存储。
首先,我在通过 WCF 传递给服务器contains
的对象中尝试了一个方法。Region
好吧,这当然不起作用,因为它无法将方法转换为 T-SQL。但是我已经看到在 linq 查询中使用了简单的 lambda 表达式,所以我尝试了这个:
Func<UniverseStationaryObject, RegionLocation, bool> contains =
(universeObject, location) => Math.Sqrt(
Math.Pow(universeObject.locationX - location.x, 2) +
Math.Pow(universeObject.locationY - location.y, 2)
) <= location.radius;
var objects = from o in dataContext.UniverseStationaryObjects
where contains.Invoke(o, Location)
select o;
不幸的是,这也不起作用——我读过Linq to SQL 查询中允许使用某些函数,但我猜数学函数不在其中?我需要一个存储功能吗?存储的函数会是什么样子(我从未在 T-SQL 中编写过)?我可以将 C# 对象传递给函数并避免提取每个值以传递给数据库服务器吗?我的意思是,当我将存储的函数添加到 linq-to-sql 类设计器时,我可以让它接受一个对象并在那时提取值吗?
请注意,检索每个对象并在 C# 中过滤它们不是一个选项。