【问题标题】:Linq to Sql: Add additional data to resultLinq to Sql:向结果添加附加数据
【发布时间】:2010-10-16 03:09:56
【问题描述】:

在这里遇到了一个奇怪的情况。尝试从某个位置(纬度/经度)范围内的某个 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) 附加到汽车?我不想选择新车{距离 = i.Distance, Id = car.Id, ... }。但是如何将这个附加值附加到汽车对象?

【问题讨论】:

    标签: c# linq-to-sql iqueryable


    【解决方案1】:

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

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

    【讨论】:

    • 这让我想到了一个想法,匿名派生类,可能会很有趣:)
    • @leppie 是的,但这会使无法命名类型变得更糟:)。
    • 没错 - 纬度、经度和距离这些元素本身并不属于汽车对象 - 我将创建一个包含汽车和这些附加属性的包装器。
    【解决方案2】:

    解决此问题的一种方法是,您可以为此设置一个部分类(如果您还没有)向其添加一个名为 DistanceToReferencePoint 的新属性,然后在查询中将该属性设置为距离,然后它将不会保存在数据库,但可以让您访问它。

    【讨论】:

    • 几乎就是我想要的。 select 语句会是什么样子?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多