代码意思:如果存在则更新,不存在则添加.根据它的id来判断是否存在.
int r3加入量 = 0, r4更新量 = 0;
foreach (var item in Students)
{
Student r2= dc.Student.SingleOrDefault(o => o.bbid == item.bbid);
if (r2!=null)
{
r2 = item;
r4更新量++;
}
else
{
r2 = item;
dc.Student.InsertOnSubmit(r2);
r3加入量++;
}
}
dc.SubmitChanges();
p1加入量 = r3加入量;
p2更新量 = r4更新量;
输入:
dc(DataContext) Students(学生集) bbid(依据是学生的id)
输出:
out 加入量 out更新量
怎么让它变成通用的.以后不管什么表都可以根据ID来判断存在就更新.不存在就添加.
请帮忙封装下.
15 个解决方案
#1
看看你的Dc 里面有没有类似 Student r2= dc.get(typeof(Student))的方法.
如果有就换过来,之后把所有的Student换成T所有代码复制到一个方法,基本就完工了.
dc.Student.InsertOnSubmit(r2); 方法看名称似乎不妥,应该是dc.Student.Insert (r2); 吧.
如果有就换过来,之后把所有的Student换成T所有代码复制到一个方法,基本就完工了.
dc.Student.InsertOnSubmit(r2); 方法看名称似乎不妥,应该是dc.Student.Insert (r2); 吧.
#2
右键选中的代码
选择菜单,重构,提取方法
选择菜单,重构,提取方法
#3
这是系统自带的linq to sql 生成的.
只有InsertOnSubmit没有Insert
dc(DataContext)也是自动生成的.没有get方法.你看看有没有其他办法.
#4
你好,这个操作出来的方法只能是这个Student表才能用.怎么变成通用的?
#5
额
我只能说以这个过程比较多余,why?实际上ORM本身就自带状态控制,所以你不需要自己计算,你只需要查询一下ORM自己的状态就ok了
基于这样的特性,你就可以重构他
int r3加入量 = 0, r4更新量 = 0;
foreach (var item in Students)
{
Student r2= dc.Student.SingleOrDefault(o => o.bbid == item.bbid);
r2 = item;
if(r2==null) dc.Student.InsertOnSubmit(r2);
}
r3=//统计查询dc中的行状态为add的数据
r4=//统计dc中行状态为modify的数据
dc.SubmitChanges();
}
ps:ORM中理所应该具有状态查询功能,因为他自己也需要根据行状态去构建sql语句,自己我不玩linq2sql,所以你可以自己去查询资料看这个方法怎么写
我只能说以这个过程比较多余,why?实际上ORM本身就自带状态控制,所以你不需要自己计算,你只需要查询一下ORM自己的状态就ok了
基于这样的特性,你就可以重构他
int r3加入量 = 0, r4更新量 = 0;
foreach (var item in Students)
{
Student r2= dc.Student.SingleOrDefault(o => o.bbid == item.bbid);
r2 = item;
if(r2==null) dc.Student.InsertOnSubmit(r2);
}
r3=//统计查询dc中的行状态为add的数据
r4=//统计dc中行状态为modify的数据
dc.SubmitChanges();
}
ps:ORM中理所应该具有状态查询功能,因为他自己也需要根据行状态去构建sql语句,自己我不玩linq2sql,所以你可以自己去查询资料看这个方法怎么写
#6
你好,你这样先赋值再判断是否为空.这样不行的吧.
r2 = item;
if(r2==null) dc.Student.InsertOnSubmit(r2);
#7
行状态这个东西我还不知道有没有.搜了下没搜到.只能先这样自己加.
#8
话说sqlhelper都有人做.
linqhelper怎么就那么难呢..高手请现身..
linqhelper怎么就那么难呢..高手请现身..
#9
linq to sql不熟悉,只能帮你友情顶一下了.
#10
高手们出来.
#11
求真相
#12
我问的问题都没能解决.伤心中....
#13
自定义泛型泛型方法应该可以
#14
添加计数、更新计数也可以通过向StateEntry传递Option查询,但可能受你Context其他地方的修改影响。
以下代码未经测试,仅供参考:
以下代码未经测试,仅供参考:
private static void AddRange<TEntity>(ObjectContext context,
IEnumerable<TEntity> entities,
out int adding, out int updating)
where TEntity : class
{
var table = context.CreateObjectSet<TEntity>();
adding = 0;
updating = 0;
foreach (var entity in entities)
{
var key = context.CreateEntityKey(table.Name, entity);
var original = context.GetObjectByKey(key) as TEntity;
if (original == null)
{
table.AddObject(entity);
adding++;
}
else
{
context.ObjectStateManager.GetObjectStateEntry(key).CurrentValues.SetValues(entity);
updating++;
}
}
}
#15
无满意结贴.
#1
看看你的Dc 里面有没有类似 Student r2= dc.get(typeof(Student))的方法.
如果有就换过来,之后把所有的Student换成T所有代码复制到一个方法,基本就完工了.
dc.Student.InsertOnSubmit(r2); 方法看名称似乎不妥,应该是dc.Student.Insert (r2); 吧.
如果有就换过来,之后把所有的Student换成T所有代码复制到一个方法,基本就完工了.
dc.Student.InsertOnSubmit(r2); 方法看名称似乎不妥,应该是dc.Student.Insert (r2); 吧.
#2
右键选中的代码
选择菜单,重构,提取方法
选择菜单,重构,提取方法
#3
这是系统自带的linq to sql 生成的.
只有InsertOnSubmit没有Insert
dc(DataContext)也是自动生成的.没有get方法.你看看有没有其他办法.
#4
你好,这个操作出来的方法只能是这个Student表才能用.怎么变成通用的?
#5
额
我只能说以这个过程比较多余,why?实际上ORM本身就自带状态控制,所以你不需要自己计算,你只需要查询一下ORM自己的状态就ok了
基于这样的特性,你就可以重构他
int r3加入量 = 0, r4更新量 = 0;
foreach (var item in Students)
{
Student r2= dc.Student.SingleOrDefault(o => o.bbid == item.bbid);
r2 = item;
if(r2==null) dc.Student.InsertOnSubmit(r2);
}
r3=//统计查询dc中的行状态为add的数据
r4=//统计dc中行状态为modify的数据
dc.SubmitChanges();
}
ps:ORM中理所应该具有状态查询功能,因为他自己也需要根据行状态去构建sql语句,自己我不玩linq2sql,所以你可以自己去查询资料看这个方法怎么写
我只能说以这个过程比较多余,why?实际上ORM本身就自带状态控制,所以你不需要自己计算,你只需要查询一下ORM自己的状态就ok了
基于这样的特性,你就可以重构他
int r3加入量 = 0, r4更新量 = 0;
foreach (var item in Students)
{
Student r2= dc.Student.SingleOrDefault(o => o.bbid == item.bbid);
r2 = item;
if(r2==null) dc.Student.InsertOnSubmit(r2);
}
r3=//统计查询dc中的行状态为add的数据
r4=//统计dc中行状态为modify的数据
dc.SubmitChanges();
}
ps:ORM中理所应该具有状态查询功能,因为他自己也需要根据行状态去构建sql语句,自己我不玩linq2sql,所以你可以自己去查询资料看这个方法怎么写
#6
你好,你这样先赋值再判断是否为空.这样不行的吧.
r2 = item;
if(r2==null) dc.Student.InsertOnSubmit(r2);
#7
行状态这个东西我还不知道有没有.搜了下没搜到.只能先这样自己加.
#8
话说sqlhelper都有人做.
linqhelper怎么就那么难呢..高手请现身..
linqhelper怎么就那么难呢..高手请现身..
#9
linq to sql不熟悉,只能帮你友情顶一下了.
#10
高手们出来.
#11
求真相
#12
我问的问题都没能解决.伤心中....
#13
自定义泛型泛型方法应该可以
#14
添加计数、更新计数也可以通过向StateEntry传递Option查询,但可能受你Context其他地方的修改影响。
以下代码未经测试,仅供参考:
以下代码未经测试,仅供参考:
private static void AddRange<TEntity>(ObjectContext context,
IEnumerable<TEntity> entities,
out int adding, out int updating)
where TEntity : class
{
var table = context.CreateObjectSet<TEntity>();
adding = 0;
updating = 0;
foreach (var entity in entities)
{
var key = context.CreateEntityKey(table.Name, entity);
var original = context.GetObjectByKey(key) as TEntity;
if (original == null)
{
table.AddObject(entity);
adding++;
}
else
{
context.ObjectStateManager.GetObjectStateEntry(key).CurrentValues.SetValues(entity);
updating++;
}
}
}
#15
无满意结贴.