linq to SQL을 사용하여 한 번에 여러 행을 업데이트하는 방법은 무엇입니까?
표:
id userid friendid name status
1 1 2 venkat false
2 1 3 sai true
3 1 4 arun false
4 1 5 arjun false
사용자가 userid = 1, friendids = 2,4,5 status = true를 보낸 경우
위의 모든 friendids 상태를 업데이트하는 방법에 대한 쿼리를 알려주세요. [한 번에 2,3,4].?
감사
하나의 열을 업데이트하려면 다음과 같은 몇 가지 구문 옵션이 있습니다.
옵션 1
var ls=new int[]{2,3,4};
using (var db=new SomeDatabaseContext())
{
var some= db.SomeTable.Where(x=>ls.Contains(x.friendid)).ToList();
some.ForEach(a=>a.status=true);
db.SubmitChanges();
}
옵션 2
using (var db=new SomeDatabaseContext())
{
db.SomeTable
.Where(x=>ls.Contains(x.friendid))
.ToList()
.ForEach(a=>a.status=true);
db.SubmitChanges();
}
옵션 3
using (var db=new SomeDatabaseContext())
{
foreach (var some in db.SomeTable.Where(x=>ls.Contains(x.friendid)).ToList())
{
some.status=true;
}
db.SubmitChanges();
}
최신 정보
주석에서 요청한대로 여러 열을 업데이트하는 방법을 보여주는 것이 합리적 일 수 있습니다. 따라서이 연습의 목적을 위해 status
at 1 을 업데이트하는 것이 아니라고 가정 해 보겠습니다 . 우리는 업데이트 할 name
과 status
를 Where friendid
일치입니다. 이에 대한 몇 가지 구문 옵션은 다음과 같습니다.
옵션 1
var ls=new int[]{2,3,4};
var name="Foo";
using (var db=new SomeDatabaseContext())
{
var some= db.SomeTable.Where(x=>ls.Contains(x.friendid)).ToList();
some.ForEach(a=>
{
a.status=true;
a.name=name;
}
);
db.SubmitChanges();
}
옵션 2
using (var db=new SomeDatabaseContext())
{
db.SomeTable
.Where(x=>ls.Contains(x.friendid))
.ToList()
.ForEach(a=>
{
a.status=true;
a.name=name;
}
);
db.SubmitChanges();
}
옵션 3
using (var db=new SomeDatabaseContext())
{
foreach (var some in db.SomeTable.Where(x=>ls.Contains(x.friendid)).ToList())
{
some.status=true;
some.name=name;
}
db.SubmitChanges();
}
업데이트 2
대답에서 LINQ to SQL을 사용하고 있었고이 경우 데이터베이스에 커밋하는 방법은 다음과 같습니다.
db.SubmitChanges();
그러나 Entity Framework가 변경 사항을 커밋하려면 다음과 같습니다.
db.SaveChanges()
Do not use the ToList()
method as in the accepted answer !
Running SQL profiler, I verified and found that ToList()
function gets all the records from the database. It is really bad performance !!
I would have run this query by pure sql command as follows:
string query = "Update YourTable Set ... Where ...";
context.Database.ExecuteSqlCommandAsync(query, new SqlParameter("@ColumnY", value1), new SqlParameter("@ColumnZ", value2));
This would operate the update in one-shot without selecting even one row.
This is what I did:
EF:
using (var context = new SomeDBContext())
{
foreach (var item in model.ShopItems) // ShopItems is a posted list with values
{
var feature = context.Shop
.Where(h => h.ShopID == 123 && h.Type == item.Type).ToList();
feature.ForEach(a => a.SortOrder = item.SortOrder);
}
context.SaveChanges();
}
Hope helps someone.
'programing' 카테고리의 다른 글
원인 : java.lang.UnsupportedOperationException : 차원으로 변환 할 수 없음 : 유형 = 0x1 (0) | 2020.09.20 |
---|---|
동일한 크기의 두 배열에서 Ruby 해시를 만드는 방법은 무엇입니까? (0) | 2020.09.20 |
Twig 템플릿에서 for 루프 내에서 중단 또는 계속을 사용하려면 어떻게해야합니까? (0) | 2020.09.20 |
UITableView를 그룹화 스타일로 설정하는 방법 (0) | 2020.09.20 |
JDBC에서 DATETIME 값 0000-00-00 00:00:00 처리 (0) | 2020.09.20 |