Роман вот написал следующее но оказывается эти универсальные типы не работают с значимым типами. Остается только вариант деревья выражений но никак не могу понять эти деревья.
public static bool ExistById<T> (this DbSet<T> source, int Id)
{
string sql = source.ToString();
var regex = new Regex("FROM (?<table>.*) AS");
var match =regex.Match(sql);
var tableName = match.Groups["table"].Value;
string query = string.Format("SELECT [dbo].[{0}].[Id] FROM [dbo].[{0}] WHERE [dbo].[{0}].[Id] == {1}", tableName, Id.ToString());
var result = source.SqlQuery(query).FirstOrDefault();
return result != null ? true : false;
}