Я ссылаюсь на ответ Роберта Харви и ваш комментарий:
«Нужно ли мне наследовать что-то особенное, чтобы решение работало?»
Да, поскольку вы используете универсальный тип (T), вам нужно ограничить универсальный тип чем-то, иначе T может быть чем угодно (object, int, string, Products и т. Д.), И что угодно может иметь разные свойства.
Таким образом, в идеале было бы иметь базовый тип или интерфейс, т.е.
pulbic interface IEntity
{
Object Id { set; get; }
}
Итак, ваш табличный объект (сущность) должен наследоваться от IEntity, и тогда ваш код будет выглядеть так:
protected void Page_Load(object sender, EventArgs e)
{
something(Linq.AnotherTable);
}
public void something<T>(System.Data.Linq.Table<T> MyObject)
where T : IEntity
{
var Edit = (from R in MyObject
where R.ID == RecordID
select R).Single();
}
Метод "что-то" выведет для вас T, если таблица AnotherTable наследуется от IEntity.
Следующая проблема заключается в том, что «Id» относится к типу object или к какому-либо другому типу, который вы хотели бы видеть, но это фиксированный тип. Итак, у вас снова проблема, что делать, если у вас есть разные типы идентификаторов? Поэтому вместо объекта или любого другого объекта, который вы указали (например, int, string, Guid), вы можете использовать «Ключ» в качестве свойства с универсальным типом, и возможное решение будет следующим:
pulbic interface IEntity<TKey>
{
TKey Key { set; get; }
}
Это становится более гибким, но еще более усложняет ситуацию ...