Linq to Sql:向结果中添加其他数据

时间:2009-03-28 15:42:18

标签: c# linq-to-sql iqueryable

在这里陷入了一种奇怪的境地。尝试在一个位置(lat / long)的特定范围内从sql数据库中提取汽车,然后返回IQueryable以在结果集上执行其他逻辑。

public IQueryable<Car> QueryAllCarsByDistance(float latitude, float longitude, int distance)
{
    var cars = from car in QueryAllCars()
               join i in sqlContext.QueryContactsByDistance(latitude, longitude, distance)
               on car.ContactId equals i.Id
               orderby i.Distance
               select car;

    return cars;
}

QueryContactByDistance是SQL数据库中的一个函数,而QueryAllCars只返回数据库中的所有汽车。

我现在的问题是:如何将距离(i.Distance)附加到汽车上?我不想做一个新的Car {Distance = i.Distance,Id = car.Id,...}。但是如何将这个附加值附加到汽车对象?

2 个答案:

答案 0 :(得分:3)

不幸的是没有办法做到这一点。对于大多数正常编码目的,C#和VB.Net发出的类型定义是不可变的。无法在运行时添加或删除字段和属性。

您所能做的就是创建一个新的类型,它包装Car类型并提供附加属性。或者创建一个具有所需属性的AnonymousType。

答案 1 :(得分:0)

这方面的一个方法是你可以为此设置一个局部类(如果你还没有)向它添加一个名为DistanceToReferencePoint的新属性,然后在查询中将该属性设置为距离,那么它就不会保存在数据库,但会让你访问它。