我想通過使用相同的功能來獲取實體。如何在Linqtosql中生成通用的GetById(int Id)函數?
public static T getById<T>(int Id)
{
myDataContect db = new myDataContect();
return (from u in db.GetTable<T> where u.Id == Id select u).FirstOrDefault();
}
如何編寫有效函數?有任何想法嗎 ?
我想通過使用相同的功能來獲取實體。如何在Linqtosql中生成通用的GetById(int Id)函數?
public static T getById<T>(int Id)
{
myDataContect db = new myDataContect();
return (from u in db.GetTable<T> where u.Id == Id select u).FirstOrDefault();
}
如何編寫有效函數?有任何想法嗎 ?
您可以創建一個接口來聲明Id
屬性並在您的實體中實現它。然後你就可以添加一個約束是這樣的:
// you can figure out a better name this just for example
public interface ICommon
{
int Id { get; set; }
}
public static T getById<T>(int Id) where T : class, ICommon
{
myDataContect db = new myDataContect();
return (from u in db.GetTable<T> where u.Id == Id select u).FirstOrDefault();
}
+1 - 正確無誤。 – TomTom 2014-11-03 14:42:11
類型'T'必須是引用類型,以便將其用作通用類型或方法'System.Data.Linq.DataContext.GetTable
@GeylaniARCA這是因爲GetTable方法的約束,您還需要一個類約束:'where T:class,ICommon' – 2014-11-03 14:56:26
public interface ID
{
int Id { get; }
}
public class IDImpl : ID
{
public int Id { get; private set; }
}
public static T GetById<T>(int id) where T : ID
{
var myDataContect db = new myDataContect();
return (from u in db.GetTable<T> where u.Id == id select u).FirstOrDefault();
}
有什麼不對的電流是多少? – Reniuz 2014-11-03 14:40:19