StartsWith

View.Customers = from c in db.Customers
                            where c.ContactName.StartsWith("c")
                             orderby c.CompanyName
                            select c;



실제 찍히는 쿼리는?

exec sp_executesql N'SELECT [t0].[CustomerID],...
FROM [dbo].[Customers] AS [t0]
WHERE [t0].[ContactName] LIKE @p0  ORDER BY [t0].[CompanyName]', 'N'@p0 nvarchar(2)',@p0=N'c%'

 

DataTable orders = dataSet.Tables["SalesOrderHeader"];

EnumerableRowCollection<DataRow> query =
    from order in orders.AsEnumerable()
    where order.Field<bool>("OnlineOrderFlag") == true
    orderby order.Field<decimal>("TotalDue")
    select order;

DataView view = query.AsDataView();

bindingSource1.DataSource = view;

 

리스트의 List<(Of <(T>)>)..::.Find 메서드 또는 FindAll 등은 대리자 메소드 입니다.

알고나면 정말정말 유용하게 사용가능!

 

Find 는 리스트에서 결과값을 찾음 빠져나가고 FindAll은 찾고나서도 끝까지 검색합니다.

 

 

예제

리스트형식이 string 형이면 string 형으로 반환합니다 그형에 맞게 반환 합니다.

그러므로 클래스 등등 다 찾을수 있습니다 ㅎ

   List<string> dinosaurs = new List<string>();

            dinosaurs.Add("Compsognathus");
            dinosaurs.Add("Amargasaurus");
            dinosaurs.Add("Oviraptor");
            dinosaurs.Add("Velociraptor");
            dinosaurs.Add("Deinonychus");
            dinosaurs.Add("Dilophosaurus");
            dinosaurs.Add("Gallimimus");
            dinosaurs.Add("Triceratops");

리스트를 생성합니다.

 Console.WriteLine("\nFind(EndsWithSaurus): {0}",
                dinosaurs.Find(EndsWithSaurus));

 

EndsWithSaurus 를 사용해서 검색을 합니다.

        private static bool  EndsWithSaurus(String s)
        {
            if (s == "Triceratops")
            {
               return true; //찾으면 true 리턴
            }
            return false;
          
        }

찾으면 true를 반환하고 있습니다.

아래와 같이 다양한 조건을 검색 할 수 있습니다.

        private static bool  EndsWithSaurus(String s)
        {
            if ((s.Length > 5) &&
                (s.Substring(s.Length - 6).ToLower() == "saurus"))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

 

 

 

전체소스

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TESTConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            List<string> dinosaurs = new List<string>();

            dinosaurs.Add("Compsognathus");
            dinosaurs.Add("Amargasaurus");
            dinosaurs.Add("Oviraptor");
            dinosaurs.Add("Velociraptor");
            dinosaurs.Add("Deinonychus");
            dinosaurs.Add("Dilophosaurus");
            dinosaurs.Add("Gallimimus");
            dinosaurs.Add("Triceratops");
         


            Console.WriteLine("\nFind(EndsWithSaurus): {0}",
                dinosaurs.Find(EndsWithSaurus));



            Console.ReadLine();

        }

        // Search predicate returns true if a string ends in "saurus".
        private static bool  EndsWithSaurus(String s)
        {
            if ((s.Length > 5) &&
                (s.Substring(s.Length - 6).ToLower() == "saurus"))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

    }

}

 

 

만약에 "saurus" 를 변경하고 싶다면?

변수를 넘겨야 하는데 넘길수가 없따; 무명대리자 이용 뭐 전역변수로 해도 되긴된다 ㅋ

 

방법

                dinosaurs.Find(

                 delegate(string s) { //무명대리자 이용

                     if ((s.Length > 5) && (s.Substring(s.Length - 6).ToLower() ==searchopt))
                     {
                         return true;
                     }
                     else
                     {
                         return false;
                     }  
                 }


                ));   
  전체소스

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using System.Drawing;

namespace TESTConsoleApplication
{
    public  class Program
    {
       static void Main(string[] args)   
        {   
            List<string> dinosaurs = new List<string>();   
  
            dinosaurs.Add("Compsognathus");   
            dinosaurs.Add("Amargasaurus");   
            dinosaurs.Add("Oviraptor");   
            dinosaurs.Add("Velociraptor");   
            dinosaurs.Add("Deinonychus");   
            dinosaurs.Add("Dilophosaurus");   
            dinosaurs.Add("Gallimimus");   
            dinosaurs.Add("Triceratops");


            string searchopt="saurus";
            Console.WriteLine("\nFind(EndsWithSaurus): {0}",
           
            

                dinosaurs.Find(

                 delegate(string s) { //무명대리자 이용

                     if ((s.Length > 5) && (s.Substring(s.Length - 6).ToLower() ==searchopt))
                     {
                         return true;
                     }
                     else
                     {
                         return false;
                     }  
                 }


                ));   
  
  
  
            Console.ReadLine();   
  
        }   
  
        // Search predicate returns true if a string ends in "saurus".   
        private static bool  EndsWithSaurus(String s)   
        {   
            if ((s.Length > 5) &&   
                (s.Substring(s.Length - 6).ToLower() == "saurus"))   
            {   
                return true;   
            }   
            else  
            {   
                return false;   
            }   
        }   
  
    }   

      

    }

다운로드 사이트 http://www.linqpad.net/

 

Tired of querying in antiquated SQL?

Well, you don't have to!  LINQPad lets you interactively query SQL databases in a modern query language: LINQ.  Kiss goodbye to SQL Management Studio!

LINQPad supports everything in C# 3.0 and Framework 3.5:

LINQPad is also a great way to learn LINQ: it comes preloaded with 200 examples from the book, C# 3.0 in a Nutshell.  There's no better way to experience the coolness of LINQ and functional programming.

And LINQPad is more than just a LINQ tool: it's a highly ergonomic code snippet IDE that instantly executes any C#/VB expression, statement block or program – the ultimate in dynamic development. Put an end to those hundreds of Visual Studio Console projects cluttering your source folder!

Best of all, LINQPad standard edition is free and can run without installation (or with a low-impact setup). The executable is 3MB and is self-updating.

LINQPad Screenshot

Prerequisites

LINQPad requires .NET Framework 3.5.

If you have Visual Studio 2008 or Visual C# 2008 Express, then Framework 3.5 will already be installed.

LINQPad supports SQL Express, SQL 2000, SQL 2005, and (with some limitations) SQL 2008.

License

LINQPad standard edition is free to download and use. Autocompletion is an optional extra.

LINQPad is not an open-source product and the source code is protected by standard copyright laws.  Nonetheless, you are free to disassemble the executable to satisfy your curiosity. The author provides no warranties, and accepts no liability for direct or consequential damages. Read full EULA

 

참고 URL

http://msdn.microsoft.com/ko-kr/library/bb386944.aspx

 

 

직접실행

string connString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=c:\northwind.mdf;
    Integrated Security=True; Connect Timeout=30; User Instance=True";
SqlConnection nwindConn = new SqlConnection(connString);
nwindConn.Open();

Northwnd interop_db = new Northwnd(nwindConn);

SqlTransaction nwindTxn = nwindConn.BeginTransaction();

try
{
    SqlCommand cmd = new SqlCommand(
        "UPDATE Products SET QuantityPerUnit = 'single item' WHERE ProductID = 3");
    cmd.Connection = nwindConn;
    cmd.Transaction = nwindTxn;
    cmd.ExecuteNonQuery();

    interop_db.Transaction = nwindTxn;

    Product prod1 = interop_db.Products
        .First(p => p.ProductID == 4);
    Product prod2 = interop_db.Products
        .First(p => p.ProductID == 5);
    prod1.UnitsInStock -= 3;
    prod2.UnitsInStock -= 5;

    interop_db.SubmitChanges();

    nwindTxn.Commit();
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
    Console.WriteLine("Error submitting changes... all changes rolled back.");
}

nwindConn.Close();

---------------------------------------------------------------------

IEnumerable<Customer> results = db.ExecuteQuery<Customer>(
    @"select c1.custid as CustomerID, c2.custName as ContactName
        from customer1 as c1, customer2 as c2
        where c1.custid = c2.custid"
);

매개변수 삽입

IEnumerable<Customer> results = db.ExecuteQuery<Customer>( "select contactname from customers where city = {0}", "London" );

 

방법: 데이터베이스에서 행 삭제(LINQ to SQL)

LINQ to SQL에서는 하위 삭제 작업을 지원하거나 인식하지 않습니다. 제약 조건이 있는 테이블의 행을 삭제하려면 다음 작업 중 하나를 수행해야 합니다.

  • 데이터베이스의 외래 키 제약 조건에 ON DELETE CASCADE 규칙을 설정합니다.

  • 사용자 고유의 코드를 사용하여 부모 개체를 삭제하는 데 방해가 되는 자식 개체를 먼저 삭제합니다.

// Query the database for the rows to be deleted.
var deleteOrderDetails =
    from details in db.OrderDetails
    where details.OrderID == 11000
    select details;

foreach (var detail in deleteOrderDetails)
{
    db.OrderDetails.DeleteOnSubmit(detail);
}

try
{
    db.SubmitChanges();
}
catch (Exception e)
{
    Console.WriteLine(e);
    // Provide for exceptions.
}

 

------------------------------------------------------------------------

Northwnd db = new Northwnd(@"c:\northwnd.mdf");

db.Log = Console.Out;

// Specify order to be removed from database
int reqOrder = 10250;

// Fetch OrderDetails for requested order.
var ordDetailQuery =
    from odq in db.OrderDetails
    where odq.OrderID == reqOrder
    select odq;

foreach (var selectedDetail in ordDetailQuery)
{
    Console.WriteLine(selectedDetail.Product.ProductID);
    db.OrderDetails.DeleteOnSubmit(selectedDetail);
}

// Display progress.
Console.WriteLine("detail section finished.");
Console.ReadLine();

// Determine from Detail collection whether parent exists.
if (ordDetailQuery.Any())
{
    Console.WriteLine("The parent is presesnt in the Orders collection.");
    // Fetch Order.
    try
    {
        var ordFetch =
            (from ofetch in db.Orders
             where ofetch.OrderID == reqOrder
             select ofetch).First();
        db.Orders.DeleteOnSubmit(ordFetch);
        Console.WriteLine("{0} OrderID is marked for deletion.", ordFetch.OrderID);
    }
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
        Console.ReadLine();
    }
}
else
{
    Console.WriteLine("There was no parent in the Orders collection.");
}

// Display progress.
Console.WriteLine("Order section finished.");
Console.ReadLine();

try
{
    db.SubmitChanges();
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
    Console.ReadLine();
}

// Display progress.
Console.WriteLine("Submit finished.");
Console.ReadLine();

데이터베이스에 행 삽입(LINQ to SQL)

개체를 연결된 LINQ to SQL Table<(Of <(TEntity>)>) 컬렉션에 추가한 다음 변경 내용을 데이터베이스에 전송하여 행을 데이터베이스에 삽입합니다. LINQ to SQL에서는 변경 내용을 적절한 SQL INSERT 명령으로 변환합니다.

// Create a new Order object.
Order ord = new Order
{
    OrderID = 12000,
    ShipCity = "Seattle",
    OrderDate = DateTime.Now
    // …
};

// Add the new object to the Orders collection.
db.Orders.InsertOnSubmit(ord);

// Submit the change to the database.
try
{
    db.SubmitChanges();
}
catch (Exception e)
{
    Console.WriteLine(e);
    // Make some adjustments.
    // ...
    // Try again.
    db.SubmitChanges();
}

데이터베이스의 행 업데이트(LINQ to SQL)

// Query the database for the row to be updated.
var query =
    from ord in db.Orders
    where ord.OrderID == 11000
    select ord;

// Execute the query, and change the column values
// you want to change.
foreach (Order ord in query)
{
    ord.ShipName = "Mariner";
    ord.ShipVia = 2;
    // Insert any additional changes to column values.
}

// Submit the changes to the database.
try
{
    db.SubmitChanges();
}
catch (Exception e)
{
    Console.WriteLine(e);
    // Provide for exceptions.
}

저장 프로시저를 할당하여 업데이트, 삽입 및 삭제 수행(O/R 디자이너)

저장 프로시저를 지정하여 엔터티 클래스의 기본 동작을 재정의하려면
  1. 디자이너에서 LINQ to SQL 파일을 엽니다. 솔루션 탐색기에서 .dbml 파일을 두 번 클릭합니다.

  2. 서버 탐색기/데이터베이스 탐색기에서 저장 프로시저를 확장하여 엔터티 클래스의 삽입, 업데이트 및/또는 삭제 명령에 사용할 저장 프로시저를 찾습니다.

  3. 저장 프로시저를 O/R 디자이너로 끌어 놓습니다.

    저장 프로시저는 메서드 창에 DataContext 메서드로 추가됩니다. 자세한 내용은 DataContext 메서드(O/R 디자이너)를 참조하십시오.

  4. 업데이트 수행을 위해 저장 프로시저를 사용하려는 엔터티 클래스를 선택합니다.

  5. 속성 창에서 재정의할 삽입, 업데이트 또는 삭제 명령을 선택합니다.

  6. 런타임 사용 옆의 줄임표(...)를 클릭하여 동작 구성 대화 상자를 엽니다.

  7. 사용자 지정을 선택합니다

  8. 사용자 지정 목록에서 원하는 저장 프로시저를 선택합니다.

  9. 메서드 인수 및 클래스 속성 목록을 살펴보고 메서드 인수가 적절한 클래스 속성에 매핑되어 있는지 확인합니다. 업데이트 및 삭제 명령을 위해 원래 메서드 인수(Original_ArgumentName)를 원래 속성(PropertyName (Original))에 매핑합니다.

// using System.Data.Common;
Northwnd db = new Northwnd(@"c:\northwnd.mdf");

var q =
    from cust in db.Customers
    where cust.City == "London"
    select cust;

Console.WriteLine("Customers from London:");
foreach (var z in q)
{
    Console.WriteLine("\t {0}",z.ContactName);
}

DbCommand dc = db.GetCommand(q);
Console.WriteLine("\nCommand Text: \n{0}",dc.CommandText);
Console.WriteLine("\nCommand Type: {0}",dc.CommandType);
Console.WriteLine("\nConnection: {0}",dc.Connection);

Console.ReadLine();

 

출력 결과물

다음과 같이 출력됩니다.

Customers from London:

    Thomas Hardy

    Victoria Ashworth

    Elizabeth Brown

    Ann Devon

    Simon Crowther

    Marie Bertrand

    Hari Kumar

    Dominique Perrier

Command Text:

SELECT [t0].[CustomerID], [t0].[CompanyName], [t0].[ContactName], [t0].[ContactT

itle], [t0].[Address], [t0].[City], [t0].[Region], [t0].[PostalCode], [t0].[Coun

try], [t0].[Phone], [t0].[Fax]

FROM [dbo].[Customers] AS [t0]

WHERE [t0].[City] = @p0

Command Type: Text

Connection: System.Data.SqlClient.SqlConnection

 

출처 : http://channel9.msdn.com/forums/TechOff/253890-Cool-Linq-Sample-0-Linq-Pager/

Each week till Linq launches I am going to post a Linq sample that shows off some Linq features.
This week how you make a pager function using linq. 
Paging is used to work with abstract idea of collection of containers that can hold something of a given type to lead users through a long list of items. A pager is something that can return a given container given some page size and which page the developer wants to return.
Linq can model this idea of pager in 1 line of code. Two IEnumerable<T> extension methods from System.Query namespace are used Skip and Take.
Skip(int) is called first this tells Enumerator to ignore a certain number of items represented as an int. The function assume the first page has a page number of 1 though you could certainly not decrement if you like to remain zero based. 
Take(int) constrains the number of items returned which we represent with the pageSize. 
public static IEnumerable<T> GetPage<T>
(int pageNumber, int pageSize, IEnumerable<T> list)
        {
                var output = list
                      .Skip((pageNumber - 1) * pageSize)
                      .Take(pageSize);
                return output;
        }
Here is a Windows Form Sample that uses the pager to iterate through a listing of DLLs in "C:\WINDOWS\Microsoft.NET\". This can be changed to prompt user for a value or a directory more appropriate to your testing OS folder structure.
The Window Form used consists of 4 controls:
Button id = Back
Button id = Next
Textbox id = Page
ListView id = FileView (change View to 'List')
Here is the code behind for the form:
using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace _PagingThroughFiles
{
    public partial class Form1 : Form
    {
        private IEnumerable<FileInfo> m_Files;
        private IEnumerable<FileInfo> m_Results;
        private int m_PageSize = 25;
        public Form1()
        {
            InitializeComponent();
            DirectoryInfo DI = new DirectoryInfo(@"C:\WINDOWS\Microsoft.NET\");
            m_Files =
                from file in DI.GetFiles("*", SearchOption.AllDirectories)
                where file.Extension == ".dll"
                orderby file.FullName
                select file;
            BindUI(1, m_PageSize);

        }
        private void BindUI(int pageNumber, int pageSize)
        {
            FileView.Items.Clear();

            m_Results = GetPage<FileInfo>(pageNumber, pageSize, m_Files);
            foreach (var file in m_Results)
            {
                FileView.Items.Add(new ListViewItem(file.FullName));
            }
            Page.Text = pageNumber.ToString();
            Back.Enabled = pageNumber != 1;
            Next.Enabled = ((pageNumber * pageSize) + 1) <= m_Files.Count();

        }

        private void Back_Click(object sender, EventArgs e)
        {
            BindUI(int.Parse(Page.Text) - 1, m_PageSize);

        }

        private void Next_Click(object sender, EventArgs e)
        {
            BindUI(int.Parse(Page.Text) + 1, m_PageSize);

        }
        public static IEnumerable<T> GetPage<T>
(int pageNumber, int pageSize, IEnumerable<T> list)
        {

            var output = list
                  .Skip((pageNumber - 1) * pageSize)
                  .Take(pageSize);
            return output;
        }

    }
}

셀렉트

from word in BOOKs

select word

조인

var salesHistory = from salesDetail in adventureWorks.Sales.SalesOrderDetails

join salesHeader in adventureWorks.Sales.SalesOrderHeaders

on salesDetail.SalesOrderID equals salesHeader.SalesOrderID

그룹바이

            var query = from p in pList
                        group p by p.Buseo into newSelect
                        select new {
                            Buseo = newSelect.Key 
                        };
               foreach (var item in query)
               {             
                   MessageBox.Show(item.Buseo);
               }

그룹바이2

            var query = from p in packages
                        group p by p.Weight into newSelect
                        select new
                        {
                            Buseo = newSelect.Key ,
  cnt = newSelect.Count() //그룹바이갯수를 알수 있습니다.

                        };

            foreach (var item in query)
            {
                Response.Write(item.Buseo.ToString() + " cnt:" +item.cnt.ToString()+ "<br>");
            }

public void Linq80() {
   List products = GetProductList();
   var categories =
      from p in products
group p by p.Category into g
      select new {Category = g.Key, TotalUnitsInStock = g.Group.Sum(p => p.UnitsInStock)};
   ObjectDumper.Write(categories);
}

WHERE 문

from n in BOOKs where n.PostID < 5

select n

var soldOutProducts =

        from p in products

        where p.UnitsInStock == 0

        select p;

두개이상의 조건

    var expensiveInStockProducts =

        from p in products

        where p.UnitsInStock > 0 && p.UnitPrice > 3.00M

        select p;

정렬

publicvoid Linq28() {
string[] words = { "cherry", "apple", "blueberry" };
var sortedWords =
from w in words
orderby w descending
select w;
Console.WriteLine("The sorted list of words:");
foreach (var w in sortedWords) {
Console.WriteLine(w);
}
}

Count  , Distinct

   int[] factorsOf300 = { 2, 2, 3, 5, 5 };

   int uniqueFactors = factorsOf300.Distinct().Count();

   Console.WriteLine("There are {0} unique factors of 300.", uniqueFactors);

스킵 건너뛰기 Skip - Simple

This sample uses Skip to get all but the first 4 elements of the array.

public void Linq22() {

            int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

            var allButFirst4Numbers = numbers.Skip(4);

            Console.WriteLine("All but first 4 numbers:");

            foreach (var n in allButFirst4Numbers) {

                Console.WriteLine(n);

            }

        }

All but first 4 numbers:

9

8

6

7

2

0

TOP 10

from v in Products.Take(10)

select v

SUM

Enumerable..::.Sum<(Of <(TSource>)>) 메서드 (IEnumerable<(Of <(TSource>)>), Func<(Of <(TSource, Double>)>))

업데이트: 2007년 11월

입력 시퀀스의 각 요소에 대해 변형 함수를 호출하여 가져온 :Track('ctl00_MTContentSelector1_mainContentContainer_ctl00|ctl00_MTContentSelector1_mainContentContainer_ctl09',this);" href="http://msdn.microsoft.com/ko-kr/library/system.double.aspx">Double 값 시퀀스의 합을 계산합니다

class Package
{
    public string Company { get; set; }
    public double Weight { get; set; }
}

public static void SumEx1()
{
    List<Package> packages =
        new List<Package>
            { new Package { Company = "Coho Vineyard", Weight = 25.2 },
              new Package { Company = "Lucerne Publishing", Weight = 18.7 },
              new Package { Company = "Wingtip Toys", Weight = 6.0 },
              new Package { Company = "Adventure Works", Weight = 33.8 } };

    double totalWeight = packages.Sum(pkg => pkg.Weight);

    Console.WriteLine("The total weight of the packages is: {0}", totalWeight);
}

/*
This code produces the following output:

The total weight of the packages is: 83.7
*/

LINQ 쿼리 식(C# 프로그래밍 가이드)

업데이트: 2007년 11월

LINQ(통합 언어 쿼리)는 C# 언어(또한 Visual Basic 및 잠재적으로 다른 모든 .NET 언어)에 대한 쿼리 기능의 직접 통합을 기반으로 하는 기술 집합의 이름입니다. LINQ를 사용하면 쿼리가 클래스, 메서드, 이벤트와 같은 고급 언어 구문이 됩니다.

쿼리를 작성하는 개발자에게 가장 많이 표시되는 LINQ의 "통합 언어" 부분은 쿼리 식입니다. 쿼리 식은 C# 3.0에서 소개된 선언적 쿼리 구문으로 작성됩니다. 쿼리 구문을 사용하면 최소한의 코드로 데이터 소스에서 복잡한 필터링, 정렬 및 그룹화 작업을 수행할 수 있습니다. 동일한 기본 쿼리 식 패턴을 사용하여 SQL 데이터베이스, ADO.NET 데이터 집합, .XML 문서 및 스트림, NET 컬렉션의 데이터를 쿼리하고 변환합니다.

다음 예제에서는 전체 쿼리 작업을 보여 줍니다. 전체 작업에는 데이터 소스 만들기, 쿼리 식 정의 및 foreach 문으로 쿼리 실행이 포함됩니다.

http://msdn.microsoft.com/ko-kr/library/bb397676.aspx

항목

설명

쿼리 식 기본 사항(C# 프로그래밍 가이드)

기본적인 쿼리 개념을 소개하고 C# 쿼리 구문의 예제를 제공합니다.

방법: C#에서 LINQ 쿼리 작성

몇 가지 기본적인 쿼리 식 형식의 예제를 제공합니다.

방법: 쿼리 식의 예외 처리(C# 프로그래밍 가이드)

잠재적 예외 throw 코드를 쿼리 식 외부로 이동하는 방법 및 시기를 보여 줍니다.

방법: 여러 소스로 개체 컬렉션 채우기(LINQ)

select 문을 사용하여 여러 소스의 데이터를 새 형식으로 병합하는 방법을 보여 줍니다.

방법: 다양한 방법으로 결과 그룹화(C# 프로그래밍 가이드)

group 절을 사용하는 다양한 방법을 보여 줍니다.

방법: 그룹 그룹화(C# 프로그래밍 가이드)

중첩 그룹을 만드는 방법을 보여 줍니다.

방법: 그룹화 작업에서 하위 쿼리 수행(C# 프로그래밍 가이드)

쿼리의 하위 식을 새 쿼리의 데이터 소스로 사용하는 방법을 보여 줍니다.

방법: 연속 키를 기준으로 결과 그룹화(C# 프로그래밍 가이드)

스트리밍 데이터 소스에 대한 그룹화 작업을 수행할 수 있는 스레드로부터 안전한 표준 쿼리 연산자를 구현하는 방법을 보여 줍니다.

방법: 런타임에 동적으로 조건자 필터 지정(C# 프로그래밍 가이드)

동등 비교에 사용할 임의 개수의 값을 where 절에 제공하는 방법을 보여 줍니다.

방법: 쿼리 결과를 메모리에 저장(C# 프로그래밍 가이드)

foreach 루프를 사용하지 않고도 쿼리 결과를 구체화하고 저장하는 방법을 보여 줍니다.

방법: 메서드에서 쿼리 반환(C# 프로그래밍 가이드)

메서드에서 쿼리 변수를 반환하는 방법 및 이러한 변수를 입력 매개 변수로 메서드에 전달하는 방법을 보여 줍니다.

방법: 사용자 지정 조인 작업 수행(C# 프로그래밍 가이드)

조건자 함수 종류를 기반으로 조인 작업을 수행하는 방법을 보여 줍니다.

방법: 복합 키를 사용하여 조인(C# 프로그래밍 가이드)

둘 이상의 일치하는 키를 기반으로 두 개의 소스를 조인하는 방법을 보여 줍니다.

방법: Join 절 결과의 순서 정렬(C# 프로그래밍 가이드)

조인 작업으로 생성된 시퀀스를 정렬하는 방법을 보여 줍니다.

방법: 내부 조인 수행(C# 프로그래밍 가이드)

LINQ에서 내부 조인을 수행하는 방법을 보여 줍니다.

방법: 그룹화 조인 수행(C# 프로그래밍 가이드)

LINQ에서 그룹화된 조인을 생성하는 방법을 보여 줍니다.

방법: 왼쪽 외부 조인 수행(C# 프로그래밍 가이드)

LINQ에서 왼쪽 우선 외부 조인을 생성하는 방법을 보여 줍니다.

방법: 쿼리 식의 Null 값 처리(C# 프로그래밍 가이드)

LINQ 쿼리에서 null 값을 처리하는 방법을 보여 줍니다.

원본 위치 <http://msdn.microsoft.com/ko-kr/library/bb397676.aspx>

 

ScottGu’s Bolog

1) Query Products From the Database

2) Update a Product in the Database

3) Insert a New Category and Two New Products into the Database

4) Delete Products from the Database

5) Call a Stored Procedure

The code below demonstrates how to retrieve Product entities not using LINQ query syntax, but rather by calling the "GetProductsByCategory" stored procedure we added to our data model above.  Note that once I retrieve the Product results, I can update/delete them and then call db.SubmitChanges() to persist the modifications back to the database.

6) Retrieve Products with Server Side Paging

The code below demonstrates how to implement efficient server-side database paging as part of a LINQ query.  By using the Skip() and Take() operators below, we'll only return 10 rows from the database - starting with row 200.

C#:

Entity SQL

using (AdventureWorksEntities context = new AdventureWorksEntities())
{
    // Specify the order amount.
    decimal orderCost = 2500;

    // Specify the Entity SQL query that returns only online orders
    // more than the specified amount.
    string queryString = @"SELECT VALUE o FROM SalesOrderHeader AS o
        WHERE o.OnlineOrderFlag = TRUE AND o.TotalDue > @ordercost";

    try
    {
        // Define an ObjectQuery and pass the maxOrderCost parameter.
        ObjectQuery<SalesOrderHeader> onlineOrders =
            new ObjectQuery<SalesOrderHeader>(queryString, context);
        onlineOrders.Parameters.Add(
            new ObjectParameter("ordercost", orderCost));

        // Print order information.
        foreach (var onlineOrder in onlineOrders)
        {
            Console.WriteLine("Order ID: {0} Order date: "
                + "{1:d} Order number: {2}",
                onlineOrder.SalesOrderID,
                onlineOrder.OrderDate,
                onlineOrder.SalesOrderNumber);
        }
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

+ Recent posts