Все остальные ответы здесь действительны. Ответ , который вы приняли от PatrikAkerstrand , содержит очень хорошее объяснение, почему вы получаете ошибку компиляции.
В этом случае я бы рекомендовал изменить имя метода для второго, поскольку оно действительно имеет логическое различие в том, что оно делает. Вы просто не получаете «данные», вы конкретно получаете идентификаторы всего набора данных:
public static List<SomeDTO> GetData(Guid userId, int languageId)
{
// Do something here
}
public static List<int> GetDataIds(Guid userId, int iNumberOfItems)
{
var result = GetData(userID, 0);
return (from r in result select c.id).Take(iNumberOfItems).ToList<int>();
}
Использование:
List<int> ids = GetDataIds(userID, 10);
Вы также можете использовать то же имя метода, но добавить параметр:
public static List<int> GetData(Guid userId, int languageId, int iNumberOfItems)
{
var result = GetData(userID, languageId);
return (from r in result select c.id).Take(iNumberOfItems).ToList<int>();
}
Использование:
List<int> ids = GetData(userID, 0, 10);
Методы расширения
Кроме того, вы также можете расширить List<SomeDTO>
, чтобы вы могли вызывать его напрямую, если у вас уже есть заполненный список типа List<SomeDTO>
:
public static List<int> GetDataIds(this List<SomeDTO> data, Guid userId, int iNumberOfItems)
{
return (from r in data select c.id).Take(iNumberOfItems).ToList<int>();
}
Тогда вы можете использовать это так:
List<SomeDTO> result = GetData(userID, 0);
// do other stuff here using other aspects of the result...
List<int> ids = result.GetDataIds(userID, 10);