Sql 嵌套查询没有相应的键
首先我有一个函数,它有两个参数(经度,纬度) 正如你所意识到的,我有一张叫做StRestaurant的桌子。在这个表中,我有4列(PkRestaurantId、RegionId、Longitude、Latitude) 我需要一个方法,它需要4个参数Sql 嵌套查询没有相应的键,sql,linq,join,linq-to-sql,jointable,Sql,Linq,Join,Linq To Sql,Jointable,首先我有一个函数,它有两个参数(经度,纬度) 正如你所意识到的,我有一张叫做StRestaurant的桌子。在这个表中,我有4列(PkRestaurantId、RegionId、Longitude、Latitude) 我需要一个方法,它需要4个参数 public List<RestaurantDetailDto> GetRestaurant(int regionid, decimal latitude, decimal longitude, OrderType orderType)
public List<RestaurantDetailDto> GetRestaurant(int regionid, decimal latitude, decimal longitude, OrderType orderType)
{}
然后我检查订单类型
switch (orderType)
{
case OrderType.Distance:
query = query.OrderBy(x => x.DistanceTable.Distance);
break;
// and the anothers
}
最后,我试着把这个列表作为一个例子
var queryResult = query.ToList();
我一直犯这个错误:
嵌套查询没有相应的键
我也尝试了上面的查询,但返回的错误相同:s
var query = context.StRestaurant.Where(x => x.FKRegionId == regionid && x.IsActive).Join(
context.CalculateDistanceTable(latitude, longitude),
restaurant => restaurant.PKRestaurantId,
result => result.PkKeyId,
(restaurant, result) => new
{
Restaurant = restaurant,
MinumumPackagePrice = restaurant.StRestaurantRegionRelation.FirstOrDefault(x => x.FKRestaurantId == restaurant.PKRestaurantId).MinumumPackageCharge,
DistanceTable = result,
RestaurantImage = restaurant.StRestaurantImage.Where(x => x.IsDefault && x.FKRestaurantId == restaurant.PKRestaurantId),
}
);
请帮忙 这里有些东西你可以试试。首先,重写SQL函数,使其具有主键:
CREATE FUNCTION CalculateDistanceTable
(
-- Add the parameters for the function here
@lat1Degrees float,
@lon1Degrees float
)
RETURNS
@RestaurantDistances TABLE
(
-- Add the column definitions for the TABLE variable here
PkKeyId int NOT NULL primary key,
Distance float NOT NULL
)
AS
BEGIN
INSERT INTO @RestaurantDistances
SELECT dbo.GeoCalculateDistance(@lat1Degrees, @lon1Degrees, Latitude, Longitude) AS Distance, PKRestaurantId AS PkKeyId
FROM StRestaurant
RETURN
END
GO
此外,您可以尝试更改LINQ连接以使用匿名类型执行连接
var query = from restaurant in context.StRestaurant
join distance in context.CalculateDistanceTable(latitude, longitude) on new { Key = restaurant.PKRestaurantId } equals new { Key = distance.PkKeyId }
where restaurant.FKRegionId == regionid
select new
{
Restaurant = restaurant,
DistanceTable = distance,
};
如果这两个选项都没有帮助,请告诉我,我将尝试根据需要更新此答案。我以前在对结果执行.Include()时看到过这一点。我想您的投影(在第二个示例中)可能在内部执行此操作。你能把这个加到第一部分吗 在本例中,我必须在源表中添加
.Include()
:
来自上下文中的a.a.Include(“关系”)
在context.MyFunction(…)中加入b
...
当您遇到此错误时?我在尝试执行以下操作时遇到此错误:var response=query.ToList();让我星期一试试。我会让你知道这些是否有用。谢谢你的回答。@doganilker这些错误信息是相同的还是不同的?
CREATE FUNCTION CalculateDistanceTable
(
-- Add the parameters for the function here
@lat1Degrees float,
@lon1Degrees float
)
RETURNS
@RestaurantDistances TABLE
(
-- Add the column definitions for the TABLE variable here
PkKeyId int NOT NULL primary key,
Distance float NOT NULL
)
AS
BEGIN
INSERT INTO @RestaurantDistances
SELECT dbo.GeoCalculateDistance(@lat1Degrees, @lon1Degrees, Latitude, Longitude) AS Distance, PKRestaurantId AS PkKeyId
FROM StRestaurant
RETURN
END
GO
var query = from restaurant in context.StRestaurant
join distance in context.CalculateDistanceTable(latitude, longitude) on new { Key = restaurant.PKRestaurantId } equals new { Key = distance.PkKeyId }
where restaurant.FKRegionId == regionid
select new
{
Restaurant = restaurant,
DistanceTable = distance,
};