我正在使用 C#/wcf 编写 RESTful 服务,需要在 GET 上放置过滤器。比如要返回多少条记录,也许我想按某些东西进行过滤等等。考虑以下代码:
[WebGet(UriTemplate = "/devices/{DeviceId}/positions")]
public List<GPSPosition> GetDevicePositions(string deviceId)
{
//Lookup device:
using (var context = new MobileModelContext(ContextManager.AccountGKey.Value))
{
var d = context.Devices.Where(aa => aa.DeviceId == deviceId).FirstOrDefault();
if (d == null)
{
outgoingResponse.StatusCode = HttpStatusCode.NotFound;
outgoingResponse.StatusDescription = "Device not found";
return null;
}
var query = from p in context.Positions
where p.DeviceKey.Equals(d.DeviceKey)
select new GPSPosition
{
PositionGKey = p.PositionGKey,
Latitude = p.Latitude,
Longitude = p.Longitude,
Speed = p.Speed,
Accuracy = p.Accuracy,
Altitude = p.Altitude,
GPSTime = p.GPSTime,
DeviceTime = p.DeviceTime
};
return query.ToList();
}
}
[WebGet(UriTemplate = "/devices/{DeviceId}/positions?RecordCount={RecordCount}")]
public List<GPSPosition> GetDevicePositions2(string deviceId, int recordCount)
{
//Lookup device:
using (var context = new MobileModelContext(ContextManager.AccountGKey.Value))
{
var d = context.Devices.Where(aa => aa.DeviceId == deviceId).FirstOrDefault();
if (d == null)
{
outgoingResponse.StatusCode = HttpStatusCode.NotFound;
outgoingResponse.StatusDescription = "Device not found";
return null;
}
var query = from p in context.Positions
where p.DeviceKey.Equals(d.DeviceKey)
select new GPSPosition
{
PositionGKey = p.PositionGKey,
Latitude = p.Latitude,
Longitude = p.Longitude,
Speed = p.Speed,
Accuracy = p.Accuracy,
Altitude = p.Altitude,
GPSTime = p.GPSTime,
DeviceTime = p.DeviceTime
};
return query.Take(recordCount).ToList();
}
}
很多重复。我可以将代码移动到其他函数中,但我仍然有 2 个模板,我有 2 个函数。有什么方法可以为/positions/制作 1 个模板来覆盖所有可能的“?”场景?
最佳答案
Take enumerates source and yields elements until count elements have been yielded or source contains no more elements.
自 Take(n)
返回最多 n 个项目,但如果可用的项目较少,您可以重写:
public List<GPSPosition> GetDevicePositions(string deviceId)
{
return GetDevicePositions2(deviceId, int.MaxValue)
}
然后将返回所有项目。
关于c# - 如何使这段代码变干?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6245733/