관리 메뉴

심재운 블로그

LINQ 의 쿼리문법과 림다문법 비교문서 본문

닷넷관련/LINQ

LINQ 의 쿼리문법과 림다문법 비교문서

재우니 2009. 3. 2. 00:55


Filtering

 

var col = from o in Orders

          where o.CustomerID == 84

          select o;

 

var col2 = Orders.Where(o => o.CustomerID == 84);

 

Return Anonymous Type

 

var col = from o in orders

          select new

          {

              OrderID = o.OrderID,

              Cost = o.Cost

          };

 

 

var col2 = orders.Select(o => new

      {

          OrderID = o.OrderID,

          Cost = o.Cost

      }

    );

 

Ordering

 

var col = from o in orders

          orderby o.Cost ascending

          select o;

 

 

var col2 = orders.OrderBy(o => o.Cost);

 

 

var col3 = from o in orders

           orderby o.Cost descending

           select o;

 

 

var col4 = orders.OrderByDescending(o => o.Cost);

 

var col5 = from o in orders

           orderby o.Cost descending

           orderby o.CustomerID

           select o;

 

NOTE the ordering of the orderby’s

 

 

var col6 = orders.OrderBy(o => o.CustomerID).ThenByDescending(o => o.Cost);

 

//Random Ordering

 

Random R = new Random();

var col6 = from o in orders

           orderby R.Next()

           select o;

 

 

//Random Ordering

 

Random R = new Random();

var col8 = orders.OrderBy(o => R.Next());

 

Joining

 

var col = from c in customers

          join o in orders on

          c.CustomerID equals

                o.CustomerID

          select new

          {

              c.CustomerID,

              c.Name,

              o.OrderID,

              o.Cost

          };

 

var col2 = customers.Join(orders,

    c => c.CustomerID,

    o => o.CustomerID,

    (c, o) => new

        {

            c.CustomerID,

            c.Name,

            o.OrderID,

            o.Cost

        }

    );

 

 


Grouping

 

var OrderCounts = from o in orders

        group o by o.CustomerID into g

        select new

        {

            CustomerID = g.Key,

            TotalOrders = g.Count()

        };

 

var OrderCounts1 = orders.GroupBy(

         o => o.CustomerID).

         Select(g => new

         {

             CustomerID = g.Key,

             TotalOrders = g.Count()

         });

NOTE:
the grouping’s key is the same type as the grouping value. E.g. in above example grouping key is an int because o.CustomerID is an int.

 

Paging (using Skip & Take)

 

//select top 3

var col = (from o in orders

           where o.CustomerID == 84

           select o).Take(3);

 

 

 

var col2 = orders.Where(

           o => o.CustomerID == 84

           ).Take(3);

 

 

//skip first 2 and return the 2 after

 

var col3 = (from o in orders

           where o.CustomerID == 84

           orderby o.Cost

           select o).Skip(2).Take(2);

 

 

 

 

var col3 = (from o in orders

            where o.CustomerID == 84

            orderby o.Cost

            select o).Skip(2).Take(2);

 

Element Operators (Single, Last, First, ElementAt, Defaults)

 

//throws exception if no elements

var cust = (from c in customers

           where c.CustomerID == 84

           select c).Single();

 

 

 

var cust1 = customers.Single(

            c => c.CustomerID == 84);

 

//returns null if no elements

var cust = (from c in customers

            where c.CustomerID == 84

            selectc).SingleOrDefault();

 

 

 

var cust1 = customers.SingleOrDefault(

            c => c.CustomerID == 84);

 

//returns a new customer instance if no elements

var cust = (from c in customers

            where c.CustomerID == 85

            select c).DefaultIfEmpty(

              new Customer()).Single();

 

 

 

 

var cust1 = customers.Where(

            c => c.CustomerID == 85

            ).DefaultIfEmpty(newCustomer()).Single();

 

//First, Last and ElementAt used in same way

var cust4 = (from o in orders

             where o.CustomerID == 84

             orderby o.Cost

             select o).Last();

 

 

 

 

var cust5 = orders.Where(

            o => o.CustomerID == 84).

            OrderBy(o => o.Cost).Last();

NOTE:
Single, Last, First, ElementAt all throw exceptions if source sequence is empty.
SingleOrDefault, LastOrDefault, FirstOrDefault, ElementAtOrDefault all return NULL if source sequence is empty

 

Conversions

ToArray


string[] names = (from c in customers

                  select c.Name).ToArray();

ToDictionary


Dictionary<intCustomer> col = customers.ToDictionary(c => c.CustomerID);

Dictionary<stringdouble> customerOrdersWithMaxCost = (from oc in

 

(from o inorders                                                                     join c in customers on o.CustomerID equals c.CustomerID

       select new { c.Name, o.Cost })

 

group oc by oc.Name into g

      select g).ToDictionary(g => g.Key, g => g.Max(oc => oc.Cost));

ToList


List<Order> ordersOver10 = (from o in orders

where o.Cost > 10

orderby o.Cost).ToList();

ToLookup


ILookup
<intstring> customerLookup = 
           customers.ToLookup(c => c.CustomerID, c => c.Name);

 




0 Comments
댓글쓰기 폼