[ASP.NET Core 2.1] 5-8. Linq 정리

BruteForceA·2022년 7월 12일
1
post-thumbnail

개발환경

  • Visual Studio Community 2017
  • ASP.NET Core 2.2

Linq를 사용하면 sql 쿼리를 몰라도 EF에 대한 이해도가 있다면
쉽고 빠르게 작성 할 수 있다.

Linq로 Select, Insert, Update, Delete 사용하기

1. Select 쿼리

  • SELECT * FROM User
    1개, 리스트
var selectList = db.Users;
1. DbSet<User> selectList = db.Users; 
2. List<User> selectList = db.Users.ToList().Where().OrderBy();
3. IEnumerable<User> selectList = db.Users.AsEnumerable();
4. IQueryable<User> selectList = from user in db.Users select user; // Linq to Sql -> Stackoverflow에서 사용한다.

IEnumerable vs IQueryable

Extension Query => 작성이 가능
1. IEnumerable => 쿼리 => 데이터(10명) => Client => 느리다.
2. IQueryable => 쿼리 =>데이터(10명) => Server => 빠르다.
동작 방식이 달라서 때에 따라서 잘 쓰면 성능향상에 도움이 된다.

IEnumerable

IEnumerable 시퀀스로 변경하기 때문에 데이터베이스가 아니라 로컬 컴퓨터에서 더 많은 작업을 수행하고 LINQ to Objects 구현체와 델리게이트를 이용해서 수행된다.

IQueryable

IQueryable<T>는 LINQ-to-SQL이 작동 할 수 있도록 하는 인터페이스
LINQ to SQL 라이브러리가 모든 쿼리문을 결합하여 단번에 SQL 결과를 생성한다.




2. Insert 쿼리

  • INSERT INTO User(UserId, UserName) Values(1, “홍길동”)

db.Users.Add(User);
db.SaveChanges();

db.Users.Add(new User
{
	UserId =3,
    UserName = "홍길동",
   	Birth = "801010"
});

db.SaveChanges(); // commit(이 부분을 실행해야 DB에 반영이된다.)




3. Update 쿼리

  • 기존 정보를 수정
  • UPDATE User SET UserName=’홍길동’ WHERE UserId = 1
// 되도록 분리 합치면 코드가 너무 길어진다.
>ar user = new User { UserId = 1, UserName = "장길동" }; 

db.Entry(user).State = EntityState.Modified;
db.SaveChanges();*/




4. DELETE 쿼리

  • DELETE FROM User WHERE UserId =1
var user = new User{UserId = 2};
db.Users.Remove(user);
db.SaveChanges();

var

  • 변수의 자료형을 자동으로 저장하는 것
  • var "변수명" = "초기화 해줄 값"
  • 지역 변수로 선언하지 않으면 "형식 또는 네임스페이스 이름을 찾을 수 없다고" 오류가 뜸
  • 선언과 동시에 초기화 해야함




Linq로 Where와 OrderBy 사용하기

Where -> 조건절 -> 리스트가 가능

var list = db.Users.ToList(); // 전체출력
var list = db.Users.Where(u => u.UserName == "뚱이"); // 특정 값



게시물 1개 수정 -> 데이터 가져옴 특정 데이터 1개 가져오기

.First(), .FirstOrdDefault(), SIngle(), .SIngleOrDefault() 등 이 있다.

var user = db.Users.First(); // SELECT TOP 1 * FROM  Users

// ()안에 람다식을 넣어서 딱 1개를 조회 할 수 있다.
var user = db.Users.First(u => u.UserId == 1); // SELECT TOP 1 * FROM Users WHERE UserNAme = "임길동"



SingleOrDefulat() vs FirstOrDefault()

  • Single() : 데이터가 0이거나 1개 초과 면 오류가 발생한다. ( 1만 가능)
  • SingleOrDefault() : 1개 초과 이면 오류가 발생한다. (0 또는 1)
  • First() : 결과값이 안나오면 오류가 뜬다.
  • FirstOrDefault() : 결과값이 null 일때만 오류가 발생한다.

실무에서는 SingleOrDefulat()를 사용하면 Exception 발생할 가능성이 있기 때문에 FirstOrDefault를 많이 쓴다. FD는 두개 이상이어도 하나만 가져오기 때문에 더 사용한다. 물론 여러 결과가 나올 때 나는 두번째 결과 값을 원하는데 첫번째 결과값을 반환 해줄 수 있다. 그 값이 내가 원하는 값이 맞나에 대한 문제점이 있긴하다.



OrderBy(), DecendingBy()

OrderBy() : 1, 2, 3, 4, 5 오름차순
DecendingBy() : 5, 4, 3, 2, 1 내림차순

// 이름을 기준으로 오름차순
var list = db.Users.OrderBy(u=> u.UserName).ToList();




Linq로 테이블 JOIN하기

특정 테이블 특정 칼럼 데이터만 필요로 하는데 Include()를 사용하면 데이터를 전부 불러오기 때문에 대용량 데이터일 경우는 성능상 문제점이 있다 그래서 성능 향상을 위해 Linq에서 쿼리 구문을 권장한다. 간단하게 할 때는 Include로 사용해도 큰 부담 없이 무방하다~




참고

0개의 댓글