参考示例如下
1. Updateusing (var context = new TestEntities())
{
    var user = context.User.Where(u => u.Name == "user1").FirstOrDefault();
    user.Age += 2;    context.SaveChanges();
}
2. Deleteusing (var context = new TestEntities())
{
    var user = context.User.Where(u => u.Name == "user2").FirstOrDefault();
    context.DeleteObject(user);
    context.SaveChanges();
}
如何自定义一个方法,传入需要搞作的 表 和条件,进行增删改
public bool DelOperation(Object obj)
{
try
{
   using (var context = new TestEntities())
   { 
     context.DeleteObject(obj);
      context.SaveChanges();
   return true;
  }
catch
{
return fales;
}}
//想这样调用 DelOperation("user",cWhere)
Dictionary<string, string> cWhere= 
            new Dictionary<string, string>();
cWhere.Add("name","user1");
cWhere.Add(....);public bool DelOperation(string tableName,Dictionary<string, string>  cWhere)
{
.....这里怎么写
}
还是有其他方法呢

解决方案 »

  1.   

    直接将最新的user实体当作参数传入方法内 更新
      

  2.   

    我这里传入的是user 实体,现在要求这个实体是不定的的public bool DelOperation(string tableName,Dictionary<string, string> cWhere)
    {.....这里怎么写  根据tableName 与cWhere产生实体 }
      

  3.   

    可以使用 context.GetObjectByKey 
      

  4.   

    var eks = new List<KeyValuePair<string, object>>
    {
        new KeyValuePair<string, object>("Id", 1),
    };
    EntityKey ek = new EntityKey("XXXEntities.Jobs", eks);
    var obj = ctx.GetObjectByKey(ek);
    ...然后你可以用 ctx.DeleteObject(obj); 
      

  5.   


    用反射吧,传一个object 然后 
    obj.getType(); 获取当前实例化的类型
    obj.getType().getProperties() 获取所有属性返回 PropertyInfo 
    PropertyInfo  p  = obj.GetType().GetProperty(fieldName); //获取指定参数的属性
      

  6.   

    多重条件怎么办呢var eks = new List<KeyValuePair<string, object>>
    {
        new KeyValuePair<string, object>("姓","张"),
        new KeyValuePair<string, object>("民族", "汉"),};EntityKey ek = new EntityKey("XXXEntities.Jobs", eks);
    var obj = ctx.GetObjectByKey(ek);这样还能用吗
      

  7.   

    应该是可以的。既然是 IEnumable<KeyPair>  试试便知。
      

  8.   


    那如果要根据传入的条件返回记录应该怎么写
    GetObjectByKey只是返回单一的对像的吧。public bool SELOperation(string tableName,Dictionary<string, string> cWhere)
    {
    //  var query = context.user.where(u=>u.姓=='张' && u.民族=="汉" )
       .....这里怎么写。
       return query
    }
      

  9.   

    那只能拼SQL了, ctx.ExecuteStoreQuery()
      

  10.   

    发现有这样的用法var users = context.User.
            Where("it.Name = @name", new ObjectParameter("name", "user1")).
            Select("it.Name, it.Age").
            Top("@num", new ObjectParameter("num", 2));    foreach (var item in users)
        {
            Console.WriteLine(item["name"]);
        }如果可以将context.User替换成我传入的表名。
    将Where("it.Name = @name", new ObjectParameter("name", "user1"))
    替换在我传入的cwhere的话,应该可以达到目的。那要如何可以做到替换呢。
      

  11.   

    你说的是 dynamic.cs 里的扩展方法,支持Where里直接拼字符串。
    因为你说TableName 也是动态的,所以我没写这个方法。
    如果你的方法能定义成 SELOperation<T> 那就简单不少了