잊지 않겠습니다.

Pro LINQ (02)

Book 2009. 1. 7. 18:50
LINQ에서 사용되는 select, where, selectmany는 지연된 동작(deferred operation)을 행한다.

LINQ query가 실행하는 동시에 각 객체를 얻어내고 실행하는 것이 아닌, 결과가 이용될 때에 각각의 객체를 얻어오는 형식이 된다. 

다음과 같은 예제 LINQ query를 보면..
    public class DataContextLinq
    {
        public void QueryDatas()
        {
            NorthwindDataContext dbContext = new NorthwindDataContext(@"Data Source=Y2K\SQLEXPRESS;Initial Catalog=AdventureWorks;Integrated Security=True");
            dbContext.Log = Console.Out;

            Console.WriteLine("Queried datas - Start");
            var products = from p in dbContext.Products where p.Color == "Red" select p;
            Console.WriteLine("Queried datas - End");

            Console.WriteLine("Deferred Operation - Start");
            foreach(Product product in products)
            {
                Console.WriteLine(product.Name);
            }
        }
    }

여기에서 var products = from p in dbContext.Products where p.Color == "Red" select p; 에서 검색이 이루어지는 것이 아닌, 각 객체를 얻어낼 때에 그 Query를 던지게 된다. 결과는 다음과 같다. 



이는 foreach 문에서 기존의 DataReader에서 MoveNext() 구문을 호출하게 되는 것과 동일하게 움직이게 된다. 
또한 값을 처음호출할때, DB에 대한 Connection을 연결하기 때문에, DBContext 객체의 경우에는 생성 및 삭제에서 조금 덜 엄격한 IDispose role을 따르게 된다. 
Posted by Y2K
,

Pro LINQ (01)

Book 2009. 1. 7. 18:13
LINQ(Language-Integrated Query)는 .NET Programmer들에게 프로그램의 개발방향을 새로 만들어줬다고 해도 과언이 아니다. 무엇보다 그전까지 사용하고 있던 모든 DB에 대한 O/R mapping을 쓸데 없게 만들어버린 것 뿐 아니라 모든 데이터에 대한 객체화를 만들 수 있었다는 점에서 LINQ의 위대함이 더 보이는 것 같다. 

검색, 정렬, 다른 객체와의 Join, Grouping 모든 것을 다 LINQ를 통해서 할 수 있다는 점은 LINQ에 대한 매력을 더욱더 가지고 오게 한다. 

먼저 간단한 Hello LINQ 소스를 보면..

    public class HelloLinq
    {
        public void Hello()
        {
            string[] greetings = { "Hello world", "hello LINQ", "Hello Apress" };
            var items = from s in greetings where s.EndsWith("LINQ") select s;

            foreach(string item in items)
            {
                Console.WriteLine(item);
            }
        }
    }

    public class XmlLinq
    {
        public void FindBook()
        {
            XElement books =
                XElement.Parse(
                    @"<books>
                        <book>
                        <title>Pro LINQ: Language Integrated Query in C# 2008</title>
                        <author>Joe Rattz</author>
                        </book>
                        <book>
                        <title>Pro WF: Windows Workflow in .NET 3.0</title>
                        <author>Bruce Bukovics</author>
                        </book>
                        <book>
                        <title>Pro C# 2005 and the .NET 2.0 Platform, Third Edition</title>
                        <author>Andrew Troelsen</author>
                        </book>
                        </books>");
            var titles = from book in books.Elements("book")  
                         where (string)book.Element("author") == "Joe Rattz" select book.Element("title");
            foreach(var title in titles)
            {
                Console.WriteLine(title.Value);
            }
        }
    }

데이터 array, XML, List<object> 모든것에 대한 검색 및 데이터의 selection을 다 할 수 있다. 

흔히, LINQ를 DB에서만 보는 경향이 많은데... (이건 DB Metal의 이유가 가장 클것 같다.) LINQ는 데이터에 대한 검색이라고 할 수 있다. 모든 데이터에 대한. 

LINQ는 다음과 같이 구성되어있다. 

  • LINQ to Object : IEnumerable<T>에 대한 검색 제공
  • LINQ to XML : System.Xml.Linq에서 XML에 대한 LINQ query 검색 제공
  • LINQ to SQL : DB와 연결
  • LINQ to DataSet : ASP .NET 또는 WinForm에서 주로 사용되는 DataSet과의 연결






Posted by Y2K
,

사다리 게임

.NET Framework 2009. 1. 7. 13:34


저녁시간에 사다리 타는 것을 이야기하던것이 갑자기 생각나서 집에서 뚝딱 거리면서 만들어본것.

 

NodePoint -> NodePointGroup -> LadderGame 으로 소유하는 것으로 구조를 꾸미고,

NodePoint에서는 각 Node에서의 정보 저장

NodePointGroup에서는 Node간의 관계에 대한 정보

LadderGame에서는 각각의 Node를 움직이고, 게임의 초기화를 하는 것으로 구성.

 

Windows Form으로 간단히 구성

LadderGameDisplay라는 UserController를 이용해서 사다리 게임을 Display

 

졸면서, 옆에 KGB 3병 먹으면서 짠 알콜 코드. ㅋㅋㅋ

이제 이름을 각각 넣는것과 마지막 부분에 걸리는 내용을 넣으면 되는데..

사용자 입력 부분이라서 가장 귀찮은 코드가 될것 같음. LINQ 이용해서 DB에도 연결을 시켜볼까.. 고민도 되고. ㅋㅋ

Posted by Y2K
,