평소에 작업을 복사 붙여넣기만 하다보니 그 구문을 왜쓰는지 모르고 그냥 작성하다보니 


안좋은 습관만점점늘어가는거같아서


"왜? 이걸썻을까 무슨생각으로 썻을까" 라는 마인드를 가지고 이제는 그 코드에 개발자가 무슨생각으로 코딩을했을까


생각을 하고 나름대로 정리를 해보려고한다 


IQueryable  과 IEnumerable 의 차이에 대해 알아보려고 한다 


IEnumerable


LINQ-to-Object 이 작동하도록 하는 인터페이스이다. 원래 쿼리와 일치하는 모든개체가


데이터 베이스 메모리에 온로드된다 


 

1
2
3
4
5
6
//EF , dbset
 
public IEnumerable<master> getListCode(string code)
{
    return _dbset.Where(p => p.CODE = code);
}
cs



이구문을 실행하게 되면  master 테이블을 통으로 조회를 한후 서버단에서 처리를한다 


ex) select * from master 


그후 서버에서 where 필터링을 해준다


동작방식은 밑에그림 참조




IQueryable  



LINQ-to-SQL 이 작동하도록 하는 인터페이스이다. WHERE 조건을 걸린 쿼리가 데이터베이스에서 실행이되고


데이터베이스메모리에 code 필터링 값을 로드시켜준다


1
2
3
4
5
6
//EF , dbset
 
public IQueryable<master> getListCode(string code)
{
    return _dbset.Where(p => p.CODE = code);
}
cs



ex) select * from master where code = 2





둘의차이점은 IQueryable<T> 을 사용하면 많은 데이터를 로드할필요없이 원하는 필터링만 조회를할수있다 

예로 페이징처리를 할수있다 Take 밑 Skip 을 이용해 요청한 행만 확보할수있다

IEnumerable 을 사용하면 모든행이 메모리에 로드가된다.


간단히 요약을 하자면 


IEnumerable 은 메모리에 로드한후 필터링을 하는것이도

IQueryable 은 필터링을 거친후 필요한 데이터만 가져온다





출처 : https://www.facebook.com/DotNetInterviewQuestions/videos/751393584901587 

, https://www.codeproject.com/Articles/766541/IEnumerable-vs-IQueryable


'ASP.NET MVC' 카테고리의 다른 글

ASP.NET MVC :: JSON 데이터형식을 커스텀모델에 담기  (0) 2018.08.04

WRITTEN BY
내가달이다

,


유지보수를 하다보니 JSON 을 이용하는 경우가 많은데 현직장에서는 받아온 JSON 데이터를 


DB에 저장을한후 특정 조건이 만족될떄 저장된 JSON 데이터를 커스텀 모델에 바인딩을 한후 


프론트 페이지에 뿌려주는 경우가 종종있었다 


나중을 위해 포스팅을 해보려고 한다



// DummyModel
public class DummyModel
    {
public string NAME { get; set; }
        public string NICKNAME { get; set; }
public string ADDR { get; set; }
    }

[HttpPost]
[ValidateInput(false)]
public ActionResult DummyCreate(DummyModel dummy)
{
DUMMY_INFO_JSON = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(dummy); //.NET 객체를 JSON 포맷의 문자열로 만들기 위해서는 JavaScriptSerializer 의 Serialize() 메소드를 사용한다.
// 새로운 모델을 생성한다
NewModel model = new NewModel();
// 선작업으로 DB 에 저장되었다는 가정을 한다 그후 가져온데이터를 같은형식의 모델에 Deseralize() 해준다
model.UserMaster = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<USER_MASTER>(DUMMY_INFO_JSON);
}



'ASP.NET MVC' 카테고리의 다른 글

IQueryable vs IEnumerable 차이점  (0) 2019.02.03

WRITTEN BY
내가달이다

,


사내 관리자 페이지에서 자료를 보여줄떄 주로 JQgrid 를 이용하고있습니다 최근 클라이언트의 요구사항이 있었는데 


다중 선택을해서 일괄로 해당회원들을 승인을 해주고 싶다고 했다


크게 어려운문제가 아니고 기존 프로세스나 로직이 있으니 그걸 이용해서 만들게 됬다 


우선 해야될일은 그리드에 다중셀렉 기능을 추가를해주었다 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
jQuery("#GridMaster").jqGrid({
        url: ''       
datatype: 'json',
        mtype: 'POST',
        height: 500,
        rowNum: 0,
        hidegrid: false,
        rowList: [102030],
        multiselect: false,
        altRows: true,
        altclass: 'EvenRowClass',
        colNames: [1234,],
        colModel: [
        { name'SEQ_NO', index: 'SEQ_NO', width: 80, sortable: false, align: 'center' },
        { name'NAME', index: 'NAME', width: 70, sortable: false, align: 'center' },
        { name'ORDER_CD', index: 'ORDER_CD', width: 1, sortable: false, align: 'center', hidden : true },
        { name'ORDER_SEQ', index: 'ORDER_SEQ', width: 1, sortable: false, align: 'center', hidden: true }
        ],
        viewrecords: true,
        multiselect: true
    });
cs



multi select : true // 다중셀을 선택할수있도록 해주는 옵션입니다


1
2
3
4
5
6
7
8
9
10
11
.navButtonAdd('#pageer1',{
  caption:"Confirm",
  title:"Confirm",
  id : "Confirm"
  buttonicon:"ui-icon-save",
  onClickButton: function(){
     SaveConfirm();
  },
  position:"last"
  })
 
cs


하단바에 Confirm 이라는 버튼을 생성해준후 버튼 클릭스 SaveConfirm()을 실행시켜준다



1
$("#GridMaster").getGridParam('selarrrow'); 
cs


그리드에서 체크된 row의 id값을 가져온다 .. 


그후 for 문을 이용해 선택된 row id 값만큼 돌려준후 AJAX 비동기 통신을 해준다.


1
2
3
4
5
6
7
8
9
10
11
12
13
var JsonArray = new Array(); 
var Json = new Object();
 
Json.Name = "name";
Json.Count = 2 ;
 
JsonArray.push(Json);
 
Json.Name = "name_2";
Json.Count = 3 ;
 
JsonArray.push(Json);
 
cs

JsonArray 배열을 생성시켜준후 Object 에 값을 입력후 JSON으로 Controller 로 데이터를 보내줄생각이다 ( 위의 데이터는 예제)


JSON.stringify(Json); // JSON 형태로 데이터를 보내준다



1
2
3
4
5
6
7
8
9
10
11
12
13
public class temp_data
{
    public string Name {get;set;}
    public int Count {get;set;}
}
 
public ActionResult temp (List<temp_data> temp)
{
    foreach(var item in temp)
    {
        // save Logic
    }
cs


Controller 에서 데이터를 받아줄때 List 형식으로 받아주었다 


Ajax 를 통해 전송된 데이터형식과 똑같은 클래스를 만들어 주고 List<> 형식으로 데이터를 받아준후 foreach 문을 돌려


save Logic 을 실행시켜준다 

'ASP.NET MVC > jquery' 카테고리의 다른 글

Jquery :: 1 .empty() 텍스트 비우기  (0) 2018.05.06

WRITTEN BY
내가달이다

,


웹쪽을 이제 막 배우는 입장이다 보니 JQUERY 를 사용하다가 이해가 안되거나 한번더 다시 볼 필요가  있는 경우 에 포스팅을 해보려 합니다



회사에서 운영중인 모바일 페이지중 댓글을 infinite scroll 하는 작업이 추가가 되어서 partialview 를 이용해 infinite scroll 을 해주는 작업을 


구글신의 도움을 통해 구현을 다해서 테스트를 하는중 뜻하지 않는 버그(?) 가 발생했다


처음 로드시 스크롤을 통한 댓글들이 정상으로 보였는데  댓글을 추가할시 추가한댓글을 리스트에 다시 바인딩 될때 기존 바인딩되었던


데이터에 추가가 되어서 나오게된것이었다 즉,


1 ~ 10 번째 댓글 

11 ~ 20 번째 댓글

21 ~ 30 번째 댓글


이상태에서 댓글을 추가를 하면 


1 ~ 10 번째 댓글

11 ~ 20 번째 댓글

21 ~30 번째 댓글

1 ~ 10 번째 댓글

11 ~ 20 번째 댓글

21 ~30 번째 댓글

31 ~ 번쨰 댓글  

이런식으로 데이터가 출력이 되는걸 확인이 되었다 

그래서 이전에 있던 데이터를 어떻게 지우고 다시 바인딩데이터를 뿌리나 한참을 찾다가 찾아낸사실..

기존에 데이터를 바인딩을 할때는 

1
("#CommentList").append(htmlString);
cs


기존 데이터에 htmlString 을 append 시켜주는 식으로 추가를 해주었다 댓글이 추가 되거나 삭제 되었을때의 상황을 생각을 못하고


무작정 스택오버플로우의 코드를 복사를 하니 이런일이...


1
("#CommentList").empty().append(htmlString);
cs


그래서 찾아낸 방법이 jqery 메서드중에 .empty() 라는 메서드가 있는데


DOM 에 조건이 일치하는 요소들의 자식들을 제거를 한다 


기존 <div id= "CommentList">  에 바인딩 되어있는 데이터를 제거를 한후 다시 htmlString 을 바인딩 시키는 작업을 한다 



WRITTEN BY
내가달이다

,

안녕하세요 .. 요새 직장에 다시 들어가서 정신없이 배우느라 포스팅할 시간이없어서 주말동안에 회사에서 배운것을 정리할겸 포스팅을 할계획입니다  (_ _) 



회사업무 특성상 집계, 카운팅을 자주 하게되는데 오늘 배운 쿼리를 공부 할겸 다시보기 해보려고한다


클라이언트의 요구사항은 이것이었다 


일반회원중 등급 1, 등급 2의 거주지역을 시도별로 집계 해달라는것이었다



1. 우선 일반회원중 등급이 1,2 인 사람들의 총합을 구해보도록 하려한다


1
2
3
4
5
/* 총회원(등급 1,2) */   
SELECT COUNT(*)   
FROM USER_MASTER UM (NOLOCK)                                        -- 유저 마스터 테이블 ( 개인회원 , 기업회원 )
JOIN USER_PERSONAL UP (NOLOCK) ON UP.[USER_ID] = UM.[USER_ID]       
WHERE UM.USER_FG IN ('1''2')                                         -- 개인회원중 등급이 1,2인 회원
cs


총회원을 구한후 평소와 같이 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* 정상우편번호 회원(등급 1,2) */   
SELECT T.COUNTY, COUNT(T.[USER_ID]) AS CNT                            -- 시도 (서울,경기,부산) , 시도별 유저수 카운팅
  INTO #ADDRESS1   
FROM (   
   SELECT Z.COUNTY, UM.[USER_ID]                                      -- 시도 (서울,경기,부산) , 시도별 유저수 그후  시도,사도별유저수로 묶기위해 group by
   FROM USER_MASTER UM (NOLOCK)
   JOIN USER_PERSONAL UP (NOLOCK) ON UP.[USER_ID] = UM.[USER_ID]
   LEFT JOIN ZIPCODE Z (NOLOCK) ON Z.ZIP_CD = REPLACE(UM.ZIP_CD, '-''')  -- 우편번호 테이블을 가져온다 유저마스터의 zip 조건으로
   WHERE UM.USER_FG IN ('1''2'
     AND Z.COUNTY IS NOT NULL
   GROUP BY Z.COUNTY, UM.[USER_ID]
) AS T   
GROUP BY T.COUNTY   
ORDER BY 1   
cs


우편번호 테이블의 기본주소  유저 마스터 기본주소 를  키값으로 LEFT 조인 시켜준다


그후 시도, 시도별 유저수를 select 시켜준다 


하지만....


총회원값 과 가져온 회원수가 일치하지 않는 것이었다 ..


아무래도 회원가입을 할때 Validate 가 제대로 되지않은거 같다... 몇가지 샘플을 찾아보니 맨앞에 공백이 들어가있는 컬럼도 몇개있었다..


그래서 생각한것이 주소지 앞에 2자리만 추출을 하는것이었다 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/* 주소지 텍스트로 시도추출로 추출() */                          
SELECT T.COUNTY, COUNT(T.[USER_ID]) AS CNT   
  INTO #ADDRESS2   
FROM (   
   SELECT Z1.COUNTY, UM.[USER_ID]
   FROM USER_MASTER UM (NOLOCK)
   JOIN USER_PERSONAL UP (NOLOCK) ON UP.[USER_ID] = UM.[USER_ID]
   LEFT JOIN SYS_ZIPCODE Z (NOLOCK) ON Z.ZIP_CD = REPLACE(UM.ZIP, '-''')
   LEFT JOIN (SELECT SIDO FROM SYS_ZIPCODE (NOLOCK) GROUP BY SIDO) Z1 ON Z1.SIDO = LEFT(LTRIM(UM.ADDR1), 2--앞에 2자리 (서울,경기) 만 추출
   WHERE UM.USER_FG IN ('1''2'
     AND Z.ZIP_CD IS NULL
     AND Z1.COUNTY IS NOT NULL
   GROUP BY Z1.COUNTY, UM.[USER_ID]
) AS T   
GROUP BY T.COUNTY   
ORDER BY 1 
cs


이렇게 추출한 2개의 쿼리문을 임시테이블에 INSERT 시킨후 


1
2
3
4
5
6
7
8
/* 정상우편번호 + 주소지 텍스트 추출 회원*/   
SELECT T.SIDO, SUM(CNT) AS CNT   
FROM (   
   SELECT SIDO, CNT FROM #ADDRESS1
   UNION ALL
   SELECT SIDO, CNT FROM #ADDRESS2
) AS T   
GROUP BY T.SIDO   
cs


정상우편번호 + 주소지 에서 앞에 2자리만 추출한 테이블을 UNION ALL 시킨후 총합을 계산해


총회원과 비교를 해본후 정상을 확인해볼수 있다 ..

'ASP.NET MVC > SQL' 카테고리의 다른 글

MSSQL :: 1 Join  (0) 2017.01.13
MSSQL :: 0 CURSOR  (0) 2016.12.01

WRITTEN BY
내가달이다

,

안녕하세요 간만에 글남기네요 


node를 이용한 스트리밍전송에대해 공부하면서 정리를 하고있어서 그부분에 대해서도 천천히포스팅할 예정입니다 


자바스크립트를 이용해 간단하게 음악파일을 읽어 재생시키는 방법을 알아보려합니다


HTML





JAVASCRIPT







이와같이 파일을 선택받고 플레이버튼을 누르면 재생이됩니다


다음포스팅은 Node  를 이용한 스트리밍서버 and 파일전송을 해볼예정입니다


WRITTEN BY
내가달이다

,