System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact c6b34d46df6c7756fd4987917bfdcccadf85b234:


0000: ef bb bf 75 73 69 6e 67 20 53 79 73 74 65 6d 3b  ...using System;
0010: 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 4c 69  .using System.Li
0020: 6e 71 3b 0a 75 73 69 6e 67 20 53 79 73 74 65 6d  nq;.using System
0030: 2e 44 61 74 61 2e 4f 62 6a 65 63 74 73 3b 0a 0a  .Data.Objects;..
0040: 6e 61 6d 65 73 70 61 63 65 20 74 65 73 74 6c 69  namespace testli
0050: 6e 71 0a 7b 0a 20 20 63 6c 61 73 73 20 50 72 6f  nq.{.  class Pro
0060: 67 72 61 6d 0a 20 20 7b 0a 20 20 20 20 73 74 61  gram.  {.    sta
0070: 74 69 63 20 76 6f 69 64 20 4d 61 69 6e 28 73 74  tic void Main(st
0080: 72 69 6e 67 5b 5d 20 61 72 67 73 29 0a 20 20 20  ring[] args).   
0090: 20 7b 0a 20 20 20 20 20 20 75 73 69 6e 67 20 28   {.      using (
00a0: 6e 6f 72 74 68 77 69 6e 64 45 46 45 6e 74 69 74  northwindEFEntit
00b0: 69 65 73 20 64 62 20 3d 20 6e 65 77 20 6e 6f 72  ies db = new nor
00c0: 74 68 77 69 6e 64 45 46 45 6e 74 69 74 69 65 73  thwindEFEntities
00d0: 28 29 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20  ()).      {.    
00e0: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
00f0: 73 74 72 69 6e 67 20 65 6e 74 69 74 79 53 51 4c  string entitySQL
0100: 20 3d 20 22 53 45 4c 45 43 54 20 56 41 4c 55 45   = "SELECT VALUE
0110: 20 6f 20 46 52 4f 4d 20 4f 72 64 65 72 73 20 41   o FROM Orders A
0120: 53 20 6f 20 57 48 45 52 45 20 53 51 4c 69 74 65  S o WHERE SQLite
0130: 2e 44 61 74 65 50 61 72 74 28 27 79 79 79 79 27  .DatePart('yyyy'
0140: 2c 20 6f 2e 4f 72 64 65 72 44 61 74 65 29 20 3d  , o.OrderDate) =
0150: 20 31 39 39 37 3b 22 3b 0a 20 20 20 20 20 20 20   1997;";.       
0160: 20 20 20 4f 62 6a 65 63 74 51 75 65 72 79 3c 4f     ObjectQuery<O
0170: 72 64 65 72 73 3e 20 71 75 65 72 79 20 3d 20 64  rders> query = d
0180: 62 2e 43 72 65 61 74 65 51 75 65 72 79 3c 4f 72  b.CreateQuery<Or
0190: 64 65 72 73 3e 28 65 6e 74 69 74 79 53 51 4c 29  ders>(entitySQL)
01a0: 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  ;..          for
01b0: 65 61 63 68 20 28 4f 72 64 65 72 73 20 6f 20 69  each (Orders o i
01c0: 6e 20 71 75 65 72 79 29 0a 20 20 20 20 20 20 20  n query).       
01d0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20     {.           
01e0: 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69   Console.WriteLi
01f0: 6e 65 28 6f 2e 53 68 69 70 50 6f 73 74 61 6c 43  ne(o.ShipPostalC
0200: 6f 64 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ode);.          
0210: 7d 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20  }.        }..   
0220: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
0230: 20 76 61 72 20 71 75 65 72 79 20 3d 20 66 72 6f   var query = fro
0240: 6d 20 63 20 69 6e 20 64 62 2e 43 75 73 74 6f 6d  m c in db.Custom
0250: 65 72 73 0a 20 20 20 20 20 20 20 20 20 20 20 20  ers.            
0260: 20 20 20 20 20 20 20 20 20 20 77 68 65 72 65 20            where 
0270: 63 2e 43 69 74 79 20 3d 3d 20 22 4c 6f 6e 64 6f  c.City == "Londo
0280: 6e 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n".             
0290: 20 20 20 20 20 20 20 20 20 6f 72 64 65 72 62 79           orderby
02a0: 20 63 2e 43 6f 6d 70 61 6e 79 4e 61 6d 65 0a 20   c.CompanyName. 
02b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02c0: 20 20 20 20 20 73 65 6c 65 63 74 20 63 3b 0a 0a       select c;..
02d0: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 63 63            int cc
02e0: 20 3d 20 71 75 65 72 79 2e 43 6f 75 6e 74 28 29   = query.Count()
02f0: 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  ;..          for
0300: 65 61 63 68 20 28 43 75 73 74 6f 6d 65 72 73 20  each (Customers 
0310: 63 20 69 6e 20 71 75 65 72 79 29 0a 20 20 20 20  c in query).    
0320: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
0330: 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74      Console.Writ
0340: 65 4c 69 6e 65 28 63 2e 43 6f 6d 70 61 6e 79 4e  eLine(c.CompanyN
0350: 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ame);.          
0360: 7d 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20  }.        }..   
0370: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
0380: 20 73 74 72 69 6e 67 20 73 63 69 74 79 20 3d 20   string scity = 
0390: 22 4c 6f 6e 64 6f 6e 22 3b 0a 20 20 20 20 20 20  "London";.      
03a0: 20 20 20 20 43 75 73 74 6f 6d 65 72 73 20 63 20      Customers c 
03b0: 3d 20 64 62 2e 43 75 73 74 6f 6d 65 72 73 2e 46  = db.Customers.F
03c0: 69 72 73 74 4f 72 44 65 66 61 75 6c 74 28 63 64  irstOrDefault(cd
03d0: 20 3d 3e 20 63 64 2e 43 69 74 79 20 3d 3d 20 73   => cd.City == s
03e0: 63 69 74 79 29 3b 0a 20 20 20 20 20 20 20 20 20  city);.         
03f0: 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69   Console.WriteLi
0400: 6e 65 28 63 2e 43 6f 6d 70 61 6e 79 4e 61 6d 65  ne(c.CompanyName
0410: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20  );.        }..  
0420: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
0430: 20 20 44 61 74 65 54 69 6d 65 20 64 74 20 3d 20    DateTime dt = 
0440: 6e 65 77 20 44 61 74 65 54 69 6d 65 28 31 39 39  new DateTime(199
0450: 37 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 20 20  7, 1, 1);.      
0460: 20 20 20 20 76 61 72 20 71 75 65 72 79 20 3d 20      var query = 
0470: 66 72 6f 6d 20 6f 72 64 65 72 20 69 6e 20 64 62  from order in db
0480: 2e 4f 72 64 65 72 73 0a 20 20 20 20 20 20 20 20  .Orders.        
0490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
04a0: 65 72 65 20 6f 72 64 65 72 2e 4f 72 64 65 72 44  ere order.OrderD
04b0: 61 74 65 20 3c 20 64 74 0a 20 20 20 20 20 20 20  ate < dt.       
04c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
04d0: 65 6c 65 63 74 20 6f 72 64 65 72 3b 0a 0a 20 20  elect order;..  
04e0: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
04f0: 28 4f 72 64 65 72 73 20 6f 20 69 6e 20 71 75 65  (Orders o in que
0500: 72 79 29 0a 20 20 20 20 20 20 20 20 20 20 7b 0a  ry).          {.
0510: 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73              Cons
0520: 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28 6f 2e  ole.WriteLine(o.
0530: 4f 72 64 65 72 44 61 74 65 2e 54 6f 53 74 72 69  OrderDate.ToStri
0540: 6e 67 28 29 29 3b 0a 20 20 20 20 20 20 20 20 20  ng());.         
0550: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20   }.        }..  
0560: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
0570: 20 20 43 61 74 65 67 6f 72 69 65 73 20 63 20 3d    Categories c =
0580: 20 6e 65 77 20 43 61 74 65 67 6f 72 69 65 73 28   new Categories(
0590: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 63 2e 43  );.          c.C
05a0: 61 74 65 67 6f 72 79 4e 61 6d 65 20 3d 20 22 54  ategoryName = "T
05b0: 65 73 74 20 43 61 74 65 67 6f 72 79 22 3b 0a 20  est Category";. 
05c0: 20 20 20 20 20 20 20 20 20 63 2e 44 65 73 63 72           c.Descr
05d0: 69 70 74 69 6f 6e 20 3d 20 22 4d 79 20 44 65 73  iption = "My Des
05e0: 63 72 69 70 74 69 6f 6e 22 3b 0a 20 20 20 20 20  cription";.     
05f0: 20 20 20 20 20 64 62 2e 41 64 64 54 6f 43 61 74       db.AddToCat
0600: 65 67 6f 72 69 65 73 28 63 29 3b 0a 20 20 20 20  egories(c);.    
0610: 20 20 20 20 20 20 64 62 2e 53 61 76 65 43 68 61        db.SaveCha
0620: 6e 67 65 73 28 29 3b 0a 0a 20 20 20 20 20 20 20  nges();..       
0630: 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65     Console.Write
0640: 4c 69 6e 65 28 63 2e 43 61 74 65 67 6f 72 79 49  Line(c.CategoryI
0650: 44 29 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 63  D);..          c
0660: 2e 44 65 73 63 72 69 70 74 69 6f 6e 20 3d 20 22  .Description = "
0670: 4d 79 20 6d 6f 64 69 66 69 65 64 20 64 65 73 63  My modified desc
0680: 72 69 70 74 69 6f 6e 22 3b 0a 20 20 20 20 20 20  ription";.      
0690: 20 20 20 20 64 62 2e 53 61 76 65 43 68 61 6e 67      db.SaveChang
06a0: 65 73 28 29 3b 0a 0a 20 20 20 20 20 20 20 20 20  es();..         
06b0: 20 64 62 2e 44 65 6c 65 74 65 4f 62 6a 65 63 74   db.DeleteObject
06c0: 28 63 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64  (c);.          d
06d0: 62 2e 53 61 76 65 43 68 61 6e 67 65 73 28 29 3b  b.SaveChanges();
06e0: 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  .        }..    
06f0: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
0700: 43 75 73 74 6f 6d 65 72 73 20 63 75 73 74 20 3d  Customers cust =
0710: 20 6e 65 77 20 43 75 73 74 6f 6d 65 72 73 28 29   new Customers()
0720: 3b 0a 20 20 20 20 20 20 20 20 20 20 63 75 73 74  ;.          cust
0730: 2e 43 75 73 74 6f 6d 65 72 49 44 20 3d 20 22 4d  .CustomerID = "M
0740: 54 4d 54 4d 22 3b 0a 20 20 20 20 20 20 20 20 20  TMTM";.         
0750: 20 63 75 73 74 2e 43 6f 6e 74 61 63 74 4e 61 6d   cust.ContactNam
0760: 65 20 3d 20 22 4d 79 20 4e 61 6d 65 22 3b 0a 20  e = "My Name";. 
0770: 20 20 20 20 20 20 20 20 20 63 75 73 74 2e 43 6f           cust.Co
0780: 6d 70 61 6e 79 4e 61 6d 65 20 3d 20 22 53 51 4c  mpanyName = "SQL
0790: 69 74 65 20 43 6f 6d 70 61 6e 79 22 3b 0a 20 20  ite Company";.  
07a0: 20 20 20 20 20 20 20 20 63 75 73 74 2e 43 6f 75          cust.Cou
07b0: 6e 74 72 79 20 3d 20 22 4e 65 74 68 65 72 6c 61  ntry = "Netherla
07c0: 6e 64 73 22 3b 0a 20 20 20 20 20 20 20 20 20 20  nds";.          
07d0: 63 75 73 74 2e 43 69 74 79 20 3d 20 22 41 6d 73  cust.City = "Ams
07e0: 74 65 72 64 61 6d 22 3b 0a 20 20 20 20 20 20 20  terdam";.       
07f0: 20 20 20 63 75 73 74 2e 50 68 6f 6e 65 20 3d 20     cust.Phone = 
0800: 22 30 31 32 33 34 35 36 37 37 22 3b 0a 20 20 20  "012345677";.   
0810: 20 20 20 20 20 20 20 64 62 2e 41 64 64 54 6f 43         db.AddToC
0820: 75 73 74 6f 6d 65 72 73 28 63 75 73 74 29 3b 0a  ustomers(cust);.
0830: 20 20 20 20 20 20 20 20 20 20 64 62 2e 53 61 76            db.Sav
0840: 65 43 68 61 6e 67 65 73 28 29 3b 0a 0a 20 20 20  eChanges();..   
0850: 20 20 20 20 20 20 20 64 62 2e 44 65 6c 65 74 65         db.Delete
0860: 4f 62 6a 65 63 74 28 63 75 73 74 29 3b 0a 20 20  Object(cust);.  
0870: 20 20 20 20 20 20 20 20 64 62 2e 53 61 76 65 43          db.SaveC
0880: 68 61 6e 67 65 73 28 29 3b 0a 20 20 20 20 20 20  hanges();.      
0890: 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 7b 0a 20    }..        {. 
08a0: 20 20 20 20 20 20 20 20 20 76 61 72 20 71 75 65           var que
08b0: 72 79 20 3d 20 64 62 2e 43 75 73 74 6f 6d 65 72  ry = db.Customer
08c0: 73 2e 57 68 65 72 65 28 63 75 73 74 20 3d 3e 20  s.Where(cust => 
08d0: 63 75 73 74 2e 43 6f 75 6e 74 72 79 20 3d 3d 20  cust.Country == 
08e0: 22 44 65 6e 6d 61 72 6b 22 29 0a 20 20 20 20 20  "Denmark").     
08f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0900: 20 20 20 20 20 2e 53 65 6c 65 63 74 4d 61 6e 79       .SelectMany
0910: 28 63 75 73 74 20 3d 3e 20 63 75 73 74 2e 4f 72  (cust => cust.Or
0920: 64 65 72 73 2e 57 68 65 72 65 28 6f 20 3d 3e 20  ders.Where(o => 
0930: 6f 2e 46 72 65 69 67 68 74 20 3e 20 35 29 29 3b  o.Freight > 5));
0940: 0a 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65  ..          fore
0950: 61 63 68 20 28 4f 72 64 65 72 73 20 63 20 69 6e  ach (Orders c in
0960: 20 71 75 65 72 79 29 0a 20 20 20 20 20 20 20 20   query).        
0970: 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20    {.            
0980: 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e  Console.WriteLin
0990: 65 28 63 2e 46 72 65 69 67 68 74 29 3b 0a 20 20  e(c.Freight);.  
09a0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
09b0: 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 7b 0a 20    }..        {. 
09c0: 20 20 20 20 20 20 20 20 20 76 61 72 20 71 75 65           var que
09d0: 72 79 20 3d 20 66 72 6f 6d 20 63 20 69 6e 20 64  ry = from c in d
09e0: 62 2e 43 75 73 74 6f 6d 65 72 73 0a 20 20 20 20  b.Customers.    
09f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a00: 20 20 77 68 65 72 65 20 63 2e 4f 72 64 65 72 73    where c.Orders
0a10: 2e 41 6e 79 28 6f 20 3d 3e 20 6f 2e 4f 72 64 65  .Any(o => o.Orde
0a20: 72 44 61 74 65 2e 48 61 73 56 61 6c 75 65 20 3d  rDate.HasValue =
0a30: 3d 20 74 72 75 65 20 26 26 20 6f 2e 4f 72 64 65  = true && o.Orde
0a40: 72 44 61 74 65 2e 56 61 6c 75 65 2e 59 65 61 72  rDate.Value.Year
0a50: 20 3d 3d 20 31 39 39 37 29 0a 20 20 20 20 20 20   == 1997).      
0a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a70: 73 65 6c 65 63 74 20 63 3b 0a 0a 20 20 20 20 20  select c;..     
0a80: 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 43 75       foreach (Cu
0a90: 73 74 6f 6d 65 72 73 20 63 20 69 6e 20 71 75 65  stomers c in que
0aa0: 72 79 29 0a 20 20 20 20 20 20 20 20 20 20 7b 0a  ry).          {.
0ab0: 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73              Cons
0ac0: 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28 63 2e  ole.WriteLine(c.
0ad0: 43 6f 6d 70 61 6e 79 4e 61 6d 65 29 3b 0a 20 20  CompanyName);.  
0ae0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
0af0: 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 7b 0a 20    }..        {. 
0b00: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
0b10: 65 6e 74 69 74 79 53 51 4c 20 3d 20 22 53 45 4c  entitySQL = "SEL
0b20: 45 43 54 20 56 41 4c 55 45 20 6f 20 46 52 4f 4d  ECT VALUE o FROM
0b30: 20 4f 72 64 65 72 73 20 41 53 20 6f 20 57 48 45   Orders AS o WHE
0b40: 52 45 20 6f 2e 43 75 73 74 6f 6d 65 72 73 2e 43  RE o.Customers.C
0b50: 6f 75 6e 74 72 79 20 3c 3e 20 27 55 4b 27 20 41  ountry <> 'UK' A
0b60: 4e 44 20 6f 2e 43 75 73 74 6f 6d 65 72 73 2e 43  ND o.Customers.C
0b70: 6f 75 6e 74 72 79 20 3c 3e 20 27 4d 65 78 69 63  ountry <> 'Mexic
0b80: 6f 27 20 41 4e 44 20 59 65 61 72 28 6f 2e 4f 72  o' AND Year(o.Or
0b90: 64 65 72 44 61 74 65 29 20 3d 20 31 39 39 37 3b  derDate) = 1997;
0ba0: 22 3b 0a 20 20 20 20 20 20 20 20 20 20 4f 62 6a  ";.          Obj
0bb0: 65 63 74 51 75 65 72 79 3c 4f 72 64 65 72 73 3e  ectQuery<Orders>
0bc0: 20 71 75 65 72 79 20 3d 20 64 62 2e 43 72 65 61   query = db.Crea
0bd0: 74 65 51 75 65 72 79 3c 4f 72 64 65 72 73 3e 28  teQuery<Orders>(
0be0: 65 6e 74 69 74 79 53 51 4c 29 3b 0a 0a 20 20 20  entitySQL);..   
0bf0: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
0c00: 4f 72 64 65 72 73 20 6f 20 69 6e 20 71 75 65 72  Orders o in quer
0c10: 79 29 0a 20 20 20 20 20 20 20 20 20 20 7b 0a 20  y).          {. 
0c20: 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f             Conso
0c30: 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28 6f 2e 53  le.WriteLine(o.S
0c40: 68 69 70 50 6f 73 74 61 6c 43 6f 64 65 29 3b 0a  hipPostalCode);.
0c50: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
0c60: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 7b      }..        {
0c70: 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e  .          strin
0c80: 67 20 65 6e 74 69 74 79 53 51 4c 20 3d 20 22 53  g entitySQL = "S
0c90: 45 4c 45 43 54 20 56 41 4c 55 45 20 6f 20 46 52  ELECT VALUE o FR
0ca0: 4f 4d 20 4f 72 64 65 72 73 20 41 53 20 6f 20 57  OM Orders AS o W
0cb0: 48 45 52 45 20 4e 65 77 47 75 69 64 28 29 20 3c  HERE NewGuid() <
0cc0: 3e 20 4e 65 77 47 75 69 64 28 29 3b 22 3b 0a 20  > NewGuid();";. 
0cd0: 20 20 20 20 20 20 20 20 20 4f 62 6a 65 63 74 51           ObjectQ
0ce0: 75 65 72 79 3c 4f 72 64 65 72 73 3e 20 71 75 65  uery<Orders> que
0cf0: 72 79 20 3d 20 64 62 2e 43 72 65 61 74 65 51 75  ry = db.CreateQu
0d00: 65 72 79 3c 4f 72 64 65 72 73 3e 28 65 6e 74 69  ery<Orders>(enti
0d10: 74 79 53 51 4c 29 3b 0a 0a 20 20 20 20 20 20 20  tySQL);..       
0d20: 20 20 20 66 6f 72 65 61 63 68 20 28 4f 72 64 65     foreach (Orde
0d30: 72 73 20 6f 20 69 6e 20 71 75 65 72 79 29 0a 20  rs o in query). 
0d40: 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20           {.     
0d50: 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57         Console.W
0d60: 72 69 74 65 4c 69 6e 65 28 6f 2e 53 68 69 70 50  riteLine(o.ShipP
0d70: 6f 73 74 61 6c 43 6f 64 65 29 3b 0a 20 20 20 20  ostalCode);.    
0d80: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
0d90: 7d 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20 54 68  }..        // Th
0da0: 69 73 20 71 75 65 72 79 20 72 65 71 75 69 72 65  is query require
0db0: 73 20 53 51 4c 69 74 65 20 33 2e 36 2e 32 20 74  s SQLite 3.6.2 t
0dc0: 6f 20 66 75 6e 63 74 69 6f 6e 20 63 6f 72 72 65  o function corre
0dd0: 63 74 6c 79 0a 20 20 20 20 20 20 20 20 7b 0a 20  ctly.        {. 
0de0: 20 20 20 20 20 20 20 20 20 76 61 72 20 71 75 65           var que
0df0: 72 79 20 3d 20 66 72 6f 6d 20 70 20 69 6e 20 64  ry = from p in d
0e00: 62 2e 50 72 6f 64 75 63 74 73 0a 20 20 20 20 20  b.Products.     
0e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e20: 20 77 68 65 72 65 20 70 2e 4f 72 64 65 72 44 65   where p.OrderDe
0e30: 74 61 69 6c 73 2e 43 6f 75 6e 74 28 6f 64 20 3d  tails.Count(od =
0e40: 3e 20 6f 64 2e 4f 72 64 65 72 73 2e 43 75 73 74  > od.Orders.Cust
0e50: 6f 6d 65 72 73 2e 43 6f 75 6e 74 72 79 20 3d 3d  omers.Country ==
0e60: 20 70 2e 53 75 70 70 6c 69 65 72 73 2e 43 6f 75   p.Suppliers.Cou
0e70: 6e 74 72 79 29 20 3e 20 32 0a 20 20 20 20 20 20  ntry) > 2.      
0e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e90: 73 65 6c 65 63 74 20 70 3b 0a 0a 20 20 20 20 20  select p;..     
0ea0: 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 50 72       foreach (Pr
0eb0: 6f 64 75 63 74 73 20 70 20 69 6e 20 71 75 65 72  oducts p in quer
0ec0: 79 29 0a 20 20 20 20 20 20 20 20 20 20 7b 0a 20  y).          {. 
0ed0: 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f             Conso
0ee0: 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28 70 2e 50  le.WriteLine(p.P
0ef0: 72 6f 64 75 63 74 4e 61 6d 65 29 3b 0a 20 20 20  roductName);.   
0f00: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
0f10: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
0f20: 20 43 6f 6e 73 6f 6c 65 2e 52 65 61 64 4b 65 79   Console.ReadKey
0f30: 28 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a  ();.    }.  }.}.