Поскольку casperOne уже ответил, вы можете использовать метод ExecuteQuery
first overload (тот, который запрашивает параметр Type). Поскольку у меня была похожая проблема, и вы задали пример, вот один из них:
public IEnumerable<YourType> RetrieveData(string tableName, string name)
{
string sql = string.Format("Select * FROM {0} where Name = '{1}'", tableName, name);
var result = YourDataContext.ExecuteQuery(typeof(YourType), sql);
return result;
}
Обратите внимание на YourType
, так как вам придется определить тип, имеющий конструктор (он не может быть абстрактным или интерфейсным). Я бы посоветовал вам создать пользовательский тип, который имеет те же атрибуты, что и ваша таблица SQL. Если вы это сделаете, метод ExecuteQuery автоматически «внедрит» значения из вашей таблицы в ваш пользовательский тип. Вот так:
//This is a hypothetical table mapped from LINQ DBML
[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.ClientData")]
public partial class ClientData : INotifyPropertyChanging, INotifyPropertyChanged
{
private int _ID;
private string _NAME;
private string _AGE;
}
//This would be your custom type that emulates your ClientData table
public class ClientDataCustomType
{
private int _ID;
private string _NAME;
private string _AGE;
}
Итак, в первом примере метод ExecuteQuery был бы:
var result = YourDataContext.ExecuteQuery(typeof(ClientDataCustomType), sql);