System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact dff024645be2b8ffe16c90409d2ba67321a39b8e:


0000: ef bb bf 75 73 69 6e 67 20 53 79 73 74 65 6d 3b  ...using System;
0010: 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44  ..using System.D
0020: 69 61 67 6e 6f 73 74 69 63 73 3b 0a 75 73 69 6e  iagnostics;.usin
0030: 67 20 53 79 73 74 65 6d 2e 4c 69 6e 71 3b 0a 75  g System.Linq;.u
0040: 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74 61  sing System.Data
0050: 2e 4f 62 6a 65 63 74 73 3b 0d 0a 75 73 69 6e 67  .Objects;..using
0060: 20 53 79 73 74 65 6d 2e 54 65 78 74 3b 0a 0a 6e   System.Text;..n
0070: 61 6d 65 73 70 61 63 65 20 74 65 73 74 6c 69 6e  amespace testlin
0080: 71 0a 7b 0a 20 20 63 6c 61 73 73 20 50 72 6f 67  q.{.  class Prog
0090: 72 61 6d 0a 20 20 7b 0d 0a 20 20 20 20 20 20 70  ram.  {..      p
00a0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e  rivate static in
00b0: 74 20 4d 61 69 6e 28 73 74 72 69 6e 67 5b 5d 20  t Main(string[] 
00c0: 61 72 67 73 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  args)..      {..
00d0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 45 6e            if (En
00e0: 76 69 72 6f 6e 6d 65 6e 74 2e 47 65 74 45 6e 76  vironment.GetEnv
00f0: 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65  ironmentVariable
0100: 28 22 42 52 45 41 4b 22 29 20 21 3d 20 6e 75 6c  ("BREAK") != nul
0110: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  l)..          {.
0120: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43  .              C
0130: 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65  onsole.WriteLine
0140: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
0150: 20 20 20 20 20 22 41 74 74 61 63 68 20 61 20 64       "Attach a d
0160: 65 62 75 67 67 65 72 20 74 6f 20 70 72 6f 63 65  ebugger to proce
0170: 73 73 20 7b 30 7d 20 61 6e 64 20 70 72 65 73 73  ss {0} and press
0180: 20 61 6e 79 20 6b 65 79 20 74 6f 20 63 6f 6e 74   any key to cont
0190: 69 6e 75 65 2e 22 2c 0d 0a 20 20 20 20 20 20 20  inue.",..       
01a0: 20 20 20 20 20 20 20 20 20 20 20 50 72 6f 63 65             Proce
01b0: 73 73 2e 47 65 74 43 75 72 72 65 6e 74 50 72 6f  ss.GetCurrentPro
01c0: 63 65 73 73 28 29 2e 49 64 29 3b 0d 0a 0d 0a 20  cess().Id);.... 
01d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
01e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
01f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
0200: 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 52 65 61       Console.Rea
0210: 64 4b 65 79 28 74 72 75 65 29 3b 20 2f 2a 20 74  dKey(true); /* t
0220: 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
0230: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
0240: 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 49          catch (I
0250: 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
0260: 78 63 65 70 74 69 6f 6e 29 20 2f 2f 20 43 6f 6e  xception) // Con
0270: 73 6f 6c 65 2e 52 65 61 64 4b 65 79 0d 0a 20 20  sole.ReadKey..  
0280: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
02b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
02c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
02d0: 20 20 44 65 62 75 67 67 65 72 2e 42 72 65 61 6b    Debugger.Break
02e0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ();..          }
02f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74  ....          st
0300: 72 69 6e 67 20 61 72 67 20 3d 20 6e 75 6c 6c 3b  ring arg = null;
0310: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
0320: 20 28 28 61 72 67 73 20 21 3d 20 6e 75 6c 6c 29   ((args != null)
0330: 20 26 26 20 28 61 72 67 73 2e 4c 65 6e 67 74 68   && (args.Length
0340: 20 3e 20 30 29 29 0d 0a 20 20 20 20 20 20 20 20   > 0))..        
0350: 20 20 20 20 20 20 61 72 67 20 3d 20 61 72 67 73        arg = args
0360: 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  [0];....        
0370: 20 20 69 66 20 28 61 72 67 20 3d 3d 20 6e 75 6c    if (arg == nul
0380: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
0390: 20 20 61 72 67 20 3d 20 22 22 3b 0d 0a 0d 0a 20    arg = "";.... 
03a0: 20 20 20 20 20 20 20 20 20 61 72 67 20 3d 20 61           arg = a
03b0: 72 67 2e 54 72 69 6d 28 29 2e 54 72 69 6d 53 74  rg.Trim().TrimSt
03c0: 61 72 74 28 27 2d 27 2c 20 27 2f 27 29 2e 54 6f  art('-', '/').To
03d0: 4c 6f 77 65 72 49 6e 76 61 72 69 61 6e 74 28 29  LowerInvariant()
03e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ;....          s
03f0: 77 69 74 63 68 20 28 61 72 67 29 0d 0a 20 20 20  witch (arg)..   
0400: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
0410: 20 20 20 20 20 20 20 20 63 61 73 65 20 22 22 3a          case "":
0420: 20 2f 2f 20 53 74 72 69 6e 67 2e 45 6d 70 74 79   // String.Empty
0430: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
0440: 63 61 73 65 20 22 6f 6c 64 22 3a 0d 0a 20 20 20  case "old":..   
0450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
0460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
0470: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4f          return O
0480: 6c 64 54 65 73 74 73 28 29 3b 0d 0a 20 20 20 20  ldTests();..    
0490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
04a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
04b0: 61 73 65 20 22 73 6b 69 70 22 3a 0d 0a 20 20 20  ase "skip":..   
04c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
04d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
04e0: 20 20 20 20 20 20 20 20 69 6e 74 20 70 61 67 65          int page
04f0: 53 69 7a 65 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20  Size = 0;....   
0500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0510: 20 20 20 69 66 20 28 61 72 67 73 2e 4c 65 6e 67     if (args.Leng
0520: 74 68 20 3e 20 31 29 0d 0a 20 20 20 20 20 20 20  th > 1)..       
0530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
0540: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
0550: 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 20              arg 
0560: 3d 20 61 72 67 73 5b 31 5d 3b 0d 0a 0d 0a 20 20  = args[1];....  
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 69 66 20 28 61 72 67 20          if (arg 
0590: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
05a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05b0: 20 20 20 20 20 20 20 20 70 61 67 65 53 69 7a 65          pageSize
05c0: 20 3d 20 69 6e 74 2e 50 61 72 73 65 28 61 72 67   = int.Parse(arg
05d0: 2e 54 72 69 6d 28 29 29 3b 0d 0a 20 20 20 20 20  .Trim());..     
05e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05f0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
0600: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
0610: 72 6e 20 53 6b 69 70 54 65 73 74 28 70 61 67 65  rn SkipTest(page
0620: 53 69 7a 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Size);..        
0630: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
0640: 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75             defau
0650: 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lt:..           
0660: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
0670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0680: 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e  Console.WriteLin
0690: 65 28 22 75 6e 6b 6e 6f 77 6e 20 74 65 73 74 20  e("unknown test 
06a0: 5c 22 7b 30 7d 5c 22 22 2c 20 61 72 67 29 3b 0d  \"{0}\"", arg);.
06b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
06c0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b         return 1;
06d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
06e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
06f0: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }.... 
0700: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
0710: 74 69 63 20 69 6e 74 20 53 6b 69 70 54 65 73 74  tic int SkipTest
0720: 28 69 6e 74 20 70 61 67 65 53 69 7a 65 29 0d 0a  (int pageSize)..
0730: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
0740: 20 20 20 75 73 69 6e 67 20 28 6e 6f 72 74 68 77     using (northw
0750: 69 6e 64 45 46 45 6e 74 69 74 69 65 73 20 64 62  indEFEntities db
0760: 20 3d 20 6e 65 77 20 6e 6f 72 74 68 77 69 6e 64   = new northwind
0770: 45 46 45 6e 74 69 74 69 65 73 28 29 29 0d 0a 20  EFEntities()).. 
0780: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
0790: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6f            bool o
07a0: 6e 63 65 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20  nce = false;..  
07b0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
07c0: 63 6f 75 6e 74 20 3d 20 64 62 2e 43 75 73 74 6f  count = db.Custo
07d0: 6d 65 72 73 2e 43 6f 75 6e 74 28 29 3b 0d 0a 0d  mers.Count();...
07e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
07f0: 6e 74 20 50 61 67 65 43 6f 75 6e 74 20 3d 20 28  nt PageCount = (
0800: 70 61 67 65 53 69 7a 65 20 21 3d 20 30 29 20 3f  pageSize != 0) ?
0810: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
0820: 20 20 20 20 28 63 6f 75 6e 74 20 2f 20 70 61 67      (count / pag
0830: 65 53 69 7a 65 29 20 2b 20 28 28 63 6f 75 6e 74  eSize) + ((count
0840: 20 25 20 70 61 67 65 53 69 7a 65 29 20 3d 3d 20   % pageSize) == 
0850: 30 20 3f 20 30 20 3a 20 31 29 20 3a 20 31 3b 0d  0 ? 0 : 1) : 1;.
0860: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
0870: 20 66 6f 72 20 28 69 6e 74 20 70 61 67 65 49 6e   for (int pageIn
0880: 64 65 78 20 3d 20 30 3b 20 70 61 67 65 49 6e 64  dex = 0; pageInd
0890: 65 78 20 3c 20 50 61 67 65 43 6f 75 6e 74 3b 20  ex < PageCount; 
08a0: 70 61 67 65 49 6e 64 65 78 2b 2b 29 0d 0a 20 20  pageIndex++)..  
08b0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
08c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
08d0: 20 76 61 72 20 71 75 65 72 79 20 3d 20 64 62 2e   var query = db.
08e0: 43 75 73 74 6f 6d 65 72 73 2e 4f 72 64 65 72 42  Customers.OrderB
08f0: 79 28 70 20 3d 3e 20 70 2e 43 69 74 79 29 2e 0d  y(p => p.City)..
0900: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0910: 20 20 20 20 20 20 20 53 6b 69 70 28 70 61 67 65         Skip(page
0920: 53 69 7a 65 20 2a 20 70 61 67 65 49 6e 64 65 78  Size * pageIndex
0930: 29 2e 54 61 6b 65 28 70 61 67 65 53 69 7a 65 29  ).Take(pageSize)
0940: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
0950: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
0960: 43 75 73 74 6f 6d 65 72 73 20 63 75 73 74 6f 6d  Customers custom
0970: 65 72 73 20 69 6e 20 71 75 65 72 79 29 0d 0a 20  ers in query).. 
0980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0990: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
09a0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6f 6e            if (on
09b0: 63 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce)..           
09c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
09d0: 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 28 27 20 27  onsole.Write(' '
09e0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
09f0: 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 73              Cons
0a00: 6f 6c 65 2e 57 72 69 74 65 28 63 75 73 74 6f 6d  ole.Write(custom
0a10: 65 72 73 2e 43 75 73 74 6f 6d 65 72 49 44 29 3b  ers.CustomerID);
0a20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
0a30: 20 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20 3d            once =
0a40: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
0a50: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
0a60: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
0a70: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
0a80: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b         return 0;
0a90: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0a 20 20 20 20  ..      }...    
0aa0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69  private static i
0ab0: 6e 74 20 4f 6c 64 54 65 73 74 73 28 29 0a 20 20  nt OldTests().  
0ac0: 20 20 7b 0d 0a 20 20 20 20 20 20 75 73 69 6e 67    {..      using
0ad0: 20 28 6e 6f 72 74 68 77 69 6e 64 45 46 45 6e 74   (northwindEFEnt
0ae0: 69 74 69 65 73 20 64 62 20 3d 20 6e 65 77 20 6e  ities db = new n
0af0: 6f 72 74 68 77 69 6e 64 45 46 45 6e 74 69 74 69  orthwindEFEntiti
0b00: 65 73 28 29 29 0a 20 20 20 20 20 20 7b 0a 20 20  es()).      {.  
0b10: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
0b20: 20 20 73 74 72 69 6e 67 20 65 6e 74 69 74 79 53    string entityS
0b30: 51 4c 20 3d 20 22 53 45 4c 45 43 54 20 56 41 4c  QL = "SELECT VAL
0b40: 55 45 20 6f 20 46 52 4f 4d 20 4f 72 64 65 72 73  UE o FROM Orders
0b50: 20 41 53 20 6f 20 57 48 45 52 45 20 53 51 4c 69   AS o WHERE SQLi
0b60: 74 65 2e 44 61 74 65 50 61 72 74 28 27 79 79 79  te.DatePart('yyy
0b70: 79 27 2c 20 6f 2e 4f 72 64 65 72 44 61 74 65 29  y', o.OrderDate)
0b80: 20 3d 20 31 39 39 37 3b 22 3b 0a 20 20 20 20 20   = 1997;";.     
0b90: 20 20 20 20 20 4f 62 6a 65 63 74 51 75 65 72 79       ObjectQuery
0ba0: 3c 4f 72 64 65 72 73 3e 20 71 75 65 72 79 20 3d  <Orders> query =
0bb0: 20 64 62 2e 43 72 65 61 74 65 51 75 65 72 79 3c   db.CreateQuery<
0bc0: 4f 72 64 65 72 73 3e 28 65 6e 74 69 74 79 53 51  Orders>(entitySQ
0bd0: 4c 29 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 66  L);..          f
0be0: 6f 72 65 61 63 68 20 28 4f 72 64 65 72 73 20 6f  oreach (Orders o
0bf0: 20 69 6e 20 71 75 65 72 79 29 0a 20 20 20 20 20   in query).     
0c00: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
0c10: 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65     Console.Write
0c20: 4c 69 6e 65 28 6f 2e 53 68 69 70 50 6f 73 74 61  Line(o.ShipPosta
0c30: 6c 43 6f 64 65 29 3b 0a 20 20 20 20 20 20 20 20  lCode);.        
0c40: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20    }.        }.. 
0c50: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
0c60: 20 20 20 76 61 72 20 71 75 65 72 79 20 3d 20 66     var query = f
0c70: 72 6f 6d 20 63 20 69 6e 20 64 62 2e 43 75 73 74  rom c in db.Cust
0c80: 6f 6d 65 72 73 0a 20 20 20 20 20 20 20 20 20 20  omers.          
0c90: 20 20 20 20 20 20 20 20 20 20 20 20 77 68 65 72              wher
0ca0: 65 20 63 2e 43 69 74 79 20 3d 3d 20 22 4c 6f 6e  e c.City == "Lon
0cb0: 64 6f 6e 22 0a 20 20 20 20 20 20 20 20 20 20 20  don".           
0cc0: 20 20 20 20 20 20 20 20 20 20 20 6f 72 64 65 72             order
0cd0: 62 79 20 63 2e 43 6f 6d 70 61 6e 79 4e 61 6d 65  by c.CompanyName
0ce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0cf0: 20 20 20 20 20 20 20 73 65 6c 65 63 74 20 63 3b         select c;
0d00: 0a 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  ..          int 
0d10: 63 63 20 3d 20 71 75 65 72 79 2e 43 6f 75 6e 74  cc = query.Count
0d20: 28 29 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 66  ();..          f
0d30: 6f 72 65 61 63 68 20 28 43 75 73 74 6f 6d 65 72  oreach (Customer
0d40: 73 20 63 20 69 6e 20 71 75 65 72 79 29 0a 20 20  s c in query).  
0d50: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
0d60: 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72        Console.Wr
0d70: 69 74 65 4c 69 6e 65 28 63 2e 43 6f 6d 70 61 6e  iteLine(c.Compan
0d80: 79 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20  yName);.        
0d90: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20    }.        }.. 
0da0: 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20         {.       
0db0: 20 20 20 73 74 72 69 6e 67 20 73 63 69 74 79 20     string scity 
0dc0: 3d 20 22 4c 6f 6e 64 6f 6e 22 3b 0a 20 20 20 20  = "London";.    
0dd0: 20 20 20 20 20 20 43 75 73 74 6f 6d 65 72 73 20        Customers 
0de0: 63 20 3d 20 64 62 2e 43 75 73 74 6f 6d 65 72 73  c = db.Customers
0df0: 2e 46 69 72 73 74 4f 72 44 65 66 61 75 6c 74 28  .FirstOrDefault(
0e00: 63 64 20 3d 3e 20 63 64 2e 43 69 74 79 20 3d 3d  cd => cd.City ==
0e10: 20 73 63 69 74 79 29 3b 0a 20 20 20 20 20 20 20   scity);.       
0e20: 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65     Console.Write
0e30: 4c 69 6e 65 28 63 2e 43 6f 6d 70 61 6e 79 4e 61  Line(c.CompanyNa
0e40: 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a  me);.        }..
0e50: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
0e60: 20 20 20 20 44 61 74 65 54 69 6d 65 20 64 74 20      DateTime dt 
0e70: 3d 20 6e 65 77 20 44 61 74 65 54 69 6d 65 28 31  = new DateTime(1
0e80: 39 39 37 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20  997, 1, 1);.    
0e90: 20 20 20 20 20 20 76 61 72 20 71 75 65 72 79 20        var query 
0ea0: 3d 20 66 72 6f 6d 20 6f 72 64 65 72 20 69 6e 20  = from order in 
0eb0: 64 62 2e 4f 72 64 65 72 73 0a 20 20 20 20 20 20  db.Orders.      
0ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ed0: 77 68 65 72 65 20 6f 72 64 65 72 2e 4f 72 64 65  where order.Orde
0ee0: 72 44 61 74 65 20 3c 20 64 74 0a 20 20 20 20 20  rDate < dt.     
0ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f00: 20 73 65 6c 65 63 74 20 6f 72 64 65 72 3b 0a 0a   select order;..
0f10: 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
0f20: 68 20 28 4f 72 64 65 72 73 20 6f 20 69 6e 20 71  h (Orders o in q
0f30: 75 65 72 79 29 0a 20 20 20 20 20 20 20 20 20 20  uery).          
0f40: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 6f  {.            Co
0f50: 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28  nsole.WriteLine(
0f60: 6f 2e 4f 72 64 65 72 44 61 74 65 2e 54 6f 53 74  o.OrderDate.ToSt
0f70: 72 69 6e 67 28 29 29 3b 0a 20 20 20 20 20 20 20  ring());.       
0f80: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 0a     }.        }..
0f90: 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20          {.      
0fa0: 20 20 20 20 43 61 74 65 67 6f 72 69 65 73 20 63      Categories c
0fb0: 20 3d 20 6e 65 77 20 43 61 74 65 67 6f 72 69 65   = new Categorie
0fc0: 73 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 63  s();.          c
0fd0: 2e 43 61 74 65 67 6f 72 79 4e 61 6d 65 20 3d 20  .CategoryName = 
0fe0: 22 54 65 73 74 20 43 61 74 65 67 6f 72 79 22 3b  "Test Category";
0ff0: 0a 20 20 20 20 20 20 20 20 20 20 63 2e 44 65 73  .          c.Des
1000: 63 72 69 70 74 69 6f 6e 20 3d 20 22 4d 79 20 44  cription = "My D
1010: 65 73 63 72 69 70 74 69 6f 6e 22 3b 0a 20 20 20  escription";.   
1020: 20 20 20 20 20 20 20 64 62 2e 41 64 64 54 6f 43         db.AddToC
1030: 61 74 65 67 6f 72 69 65 73 28 63 29 3b 0a 20 20  ategories(c);.  
1040: 20 20 20 20 20 20 20 20 64 62 2e 53 61 76 65 43          db.SaveC
1050: 68 61 6e 67 65 73 28 29 3b 0a 0a 20 20 20 20 20  hanges();..     
1060: 20 20 20 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69       Console.Wri
1070: 74 65 4c 69 6e 65 28 63 2e 43 61 74 65 67 6f 72  teLine(c.Categor
1080: 79 49 44 29 3b 0a 0a 20 20 20 20 20 20 20 20 20  yID);..         
1090: 20 63 2e 44 65 73 63 72 69 70 74 69 6f 6e 20 3d   c.Description =
10a0: 20 22 4d 79 20 6d 6f 64 69 66 69 65 64 20 64 65   "My modified de
10b0: 73 63 72 69 70 74 69 6f 6e 22 3b 0a 20 20 20 20  scription";.    
10c0: 20 20 20 20 20 20 64 62 2e 53 61 76 65 43 68 61        db.SaveCha
10d0: 6e 67 65 73 28 29 3b 0a 0a 20 20 20 20 20 20 20  nges();..       
10e0: 20 20 20 64 62 2e 44 65 6c 65 74 65 4f 62 6a 65     db.DeleteObje
10f0: 63 74 28 63 29 3b 0a 20 20 20 20 20 20 20 20 20  ct(c);.         
1100: 20 64 62 2e 53 61 76 65 43 68 61 6e 67 65 73 28   db.SaveChanges(
1110: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a 20 20  );.        }..  
1120: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
1130: 20 20 43 75 73 74 6f 6d 65 72 73 20 63 75 73 74    Customers cust
1140: 20 3d 20 6e 65 77 20 43 75 73 74 6f 6d 65 72 73   = new Customers
1150: 28 29 3b 0a 20 20 20 20 20 20 20 20 20 20 63 75  ();.          cu
1160: 73 74 2e 43 75 73 74 6f 6d 65 72 49 44 20 3d 20  st.CustomerID = 
1170: 22 4d 54 4d 54 4d 22 3b 0a 20 20 20 20 20 20 20  "MTMTM";.       
1180: 20 20 20 63 75 73 74 2e 43 6f 6e 74 61 63 74 4e     cust.ContactN
1190: 61 6d 65 20 3d 20 22 4d 79 20 4e 61 6d 65 22 3b  ame = "My Name";
11a0: 0a 20 20 20 20 20 20 20 20 20 20 63 75 73 74 2e  .          cust.
11b0: 43 6f 6d 70 61 6e 79 4e 61 6d 65 20 3d 20 22 53  CompanyName = "S
11c0: 51 4c 69 74 65 20 43 6f 6d 70 61 6e 79 22 3b 0a  QLite Company";.
11d0: 20 20 20 20 20 20 20 20 20 20 63 75 73 74 2e 43            cust.C
11e0: 6f 75 6e 74 72 79 20 3d 20 22 4e 65 74 68 65 72  ountry = "Nether
11f0: 6c 61 6e 64 73 22 3b 0a 20 20 20 20 20 20 20 20  lands";.        
1200: 20 20 63 75 73 74 2e 43 69 74 79 20 3d 20 22 41    cust.City = "A
1210: 6d 73 74 65 72 64 61 6d 22 3b 0a 20 20 20 20 20  msterdam";.     
1220: 20 20 20 20 20 63 75 73 74 2e 50 68 6f 6e 65 20       cust.Phone 
1230: 3d 20 22 30 31 32 33 34 35 36 37 37 22 3b 0a 20  = "012345677";. 
1240: 20 20 20 20 20 20 20 20 20 64 62 2e 41 64 64 54           db.AddT
1250: 6f 43 75 73 74 6f 6d 65 72 73 28 63 75 73 74 29  oCustomers(cust)
1260: 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2e 53  ;.          db.S
1270: 61 76 65 43 68 61 6e 67 65 73 28 29 3b 0a 0a 20  aveChanges();.. 
1280: 20 20 20 20 20 20 20 20 20 64 62 2e 44 65 6c 65           db.Dele
1290: 74 65 4f 62 6a 65 63 74 28 63 75 73 74 29 3b 0a  teObject(cust);.
12a0: 20 20 20 20 20 20 20 20 20 20 64 62 2e 53 61 76            db.Sav
12b0: 65 43 68 61 6e 67 65 73 28 29 3b 0a 20 20 20 20  eChanges();.    
12c0: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 7b      }..        {
12d0: 0a 20 20 20 20 20 20 20 20 20 20 76 61 72 20 71  .          var q
12e0: 75 65 72 79 20 3d 20 64 62 2e 43 75 73 74 6f 6d  uery = db.Custom
12f0: 65 72 73 2e 57 68 65 72 65 28 63 75 73 74 20 3d  ers.Where(cust =
1300: 3e 20 63 75 73 74 2e 43 6f 75 6e 74 72 79 20 3d  > cust.Country =
1310: 3d 20 22 44 65 6e 6d 61 72 6b 22 29 0a 20 20 20  = "Denmark").   
1320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1330: 20 20 20 20 20 20 20 2e 53 65 6c 65 63 74 4d 61         .SelectMa
1340: 6e 79 28 63 75 73 74 20 3d 3e 20 63 75 73 74 2e  ny(cust => cust.
1350: 4f 72 64 65 72 73 2e 57 68 65 72 65 28 6f 20 3d  Orders.Where(o =
1360: 3e 20 6f 2e 46 72 65 69 67 68 74 20 3e 20 35 29  > o.Freight > 5)
1370: 29 3b 0a 0a 20 20 20 20 20 20 20 20 20 20 66 6f  );..          fo
1380: 72 65 61 63 68 20 28 4f 72 64 65 72 73 20 63 20  reach (Orders c 
1390: 69 6e 20 71 75 65 72 79 29 0a 20 20 20 20 20 20  in query).      
13a0: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
13b0: 20 20 43 6f 6e 73 6f 6c 65 2e 57 72 69 74 65 4c    Console.WriteL
13c0: 69 6e 65 28 63 2e 46 72 65 69 67 68 74 29 3b 0a  ine(c.Freight);.
13d0: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
13e0: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 7b      }..        {
13f0: 0a 20 20 20 20 20 20 20 20 20 20 76 61 72 20 71  .          var q
1400: 75 65 72 79 20 3d 20 66 72 6f 6d 20 63 20 69 6e  uery = from c in
1410: 20 64 62 2e 43 75 73 74 6f 6d 65 72 73 0a 20 20   db.Customers.  
1420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1430: 20 20 20 20 77 68 65 72 65 20 63 2e 4f 72 64 65      where c.Orde
1440: 72 73 2e 41 6e 79 28 6f 20 3d 3e 20 6f 2e 4f 72  rs.Any(o => o.Or
1450: 64 65 72 44 61 74 65 2e 48 61 73 56 61 6c 75 65  derDate.HasValue
1460: 20 3d 3d 20 74 72 75 65 20 26 26 20 6f 2e 4f 72   == true && o.Or
1470: 64 65 72 44 61 74 65 2e 56 61 6c 75 65 2e 59 65  derDate.Value.Ye
1480: 61 72 20 3d 3d 20 31 39 39 37 29 0a 20 20 20 20  ar == 1997).    
1490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a0: 20 20 73 65 6c 65 63 74 20 63 3b 0a 0a 20 20 20    select c;..   
14b0: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
14c0: 43 75 73 74 6f 6d 65 72 73 20 63 20 69 6e 20 71  Customers c in q
14d0: 75 65 72 79 29 0a 20 20 20 20 20 20 20 20 20 20  uery).          
14e0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 6f  {.            Co
14f0: 6e 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28  nsole.WriteLine(
1500: 63 2e 43 6f 6d 70 61 6e 79 4e 61 6d 65 29 3b 0a  c.CompanyName);.
1510: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
1520: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 7b      }..        {
1530: 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e  .          strin
1540: 67 20 65 6e 74 69 74 79 53 51 4c 20 3d 20 22 53  g entitySQL = "S
1550: 45 4c 45 43 54 20 56 41 4c 55 45 20 6f 20 46 52  ELECT VALUE o FR
1560: 4f 4d 20 4f 72 64 65 72 73 20 41 53 20 6f 20 57  OM Orders AS o W
1570: 48 45 52 45 20 6f 2e 43 75 73 74 6f 6d 65 72 73  HERE o.Customers
1580: 2e 43 6f 75 6e 74 72 79 20 3c 3e 20 27 55 4b 27  .Country <> 'UK'
1590: 20 41 4e 44 20 6f 2e 43 75 73 74 6f 6d 65 72 73   AND o.Customers
15a0: 2e 43 6f 75 6e 74 72 79 20 3c 3e 20 27 4d 65 78  .Country <> 'Mex
15b0: 69 63 6f 27 20 41 4e 44 20 59 65 61 72 28 6f 2e  ico' AND Year(o.
15c0: 4f 72 64 65 72 44 61 74 65 29 20 3d 20 31 39 39  OrderDate) = 199
15d0: 37 3b 22 3b 0a 20 20 20 20 20 20 20 20 20 20 4f  7;";.          O
15e0: 62 6a 65 63 74 51 75 65 72 79 3c 4f 72 64 65 72  bjectQuery<Order
15f0: 73 3e 20 71 75 65 72 79 20 3d 20 64 62 2e 43 72  s> query = db.Cr
1600: 65 61 74 65 51 75 65 72 79 3c 4f 72 64 65 72 73  eateQuery<Orders
1610: 3e 28 65 6e 74 69 74 79 53 51 4c 29 3b 0a 0a 20  >(entitySQL);.. 
1620: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
1630: 20 28 4f 72 64 65 72 73 20 6f 20 69 6e 20 71 75   (Orders o in qu
1640: 65 72 79 29 0a 20 20 20 20 20 20 20 20 20 20 7b  ery).          {
1650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e  .            Con
1660: 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28 6f  sole.WriteLine(o
1670: 2e 53 68 69 70 50 6f 73 74 61 6c 43 6f 64 65 29  .ShipPostalCode)
1680: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
1690: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 20        }..       
16a0: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 73 74 72   {.          str
16b0: 69 6e 67 20 65 6e 74 69 74 79 53 51 4c 20 3d 20  ing entitySQL = 
16c0: 22 53 45 4c 45 43 54 20 56 41 4c 55 45 20 6f 20  "SELECT VALUE o 
16d0: 46 52 4f 4d 20 4f 72 64 65 72 73 20 41 53 20 6f  FROM Orders AS o
16e0: 20 57 48 45 52 45 20 4e 65 77 47 75 69 64 28 29   WHERE NewGuid()
16f0: 20 3c 3e 20 4e 65 77 47 75 69 64 28 29 3b 22 3b   <> NewGuid();";
1700: 0a 20 20 20 20 20 20 20 20 20 20 4f 62 6a 65 63  .          Objec
1710: 74 51 75 65 72 79 3c 4f 72 64 65 72 73 3e 20 71  tQuery<Orders> q
1720: 75 65 72 79 20 3d 20 64 62 2e 43 72 65 61 74 65  uery = db.Create
1730: 51 75 65 72 79 3c 4f 72 64 65 72 73 3e 28 65 6e  Query<Orders>(en
1740: 74 69 74 79 53 51 4c 29 3b 0a 0a 20 20 20 20 20  titySQL);..     
1750: 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 4f 72       foreach (Or
1760: 64 65 72 73 20 6f 20 69 6e 20 71 75 65 72 79 29  ders o in query)
1770: 0a 20 20 20 20 20 20 20 20 20 20 7b 0a 20 20 20  .          {.   
1780: 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65           Console
1790: 2e 57 72 69 74 65 4c 69 6e 65 28 6f 2e 53 68 69  .WriteLine(o.Shi
17a0: 70 50 6f 73 74 61 6c 43 6f 64 65 29 3b 0a 20 20  pPostalCode);.  
17b0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
17c0: 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f 2f 20    }..        // 
17d0: 54 68 69 73 20 71 75 65 72 79 20 72 65 71 75 69  This query requi
17e0: 72 65 73 20 53 51 4c 69 74 65 20 33 2e 36 2e 32  res SQLite 3.6.2
17f0: 20 74 6f 20 66 75 6e 63 74 69 6f 6e 20 63 6f 72   to function cor
1800: 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20 7b  rectly.        {
1810: 0a 20 20 20 20 20 20 20 20 20 20 76 61 72 20 71  .          var q
1820: 75 65 72 79 20 3d 20 66 72 6f 6d 20 70 20 69 6e  uery = from p in
1830: 20 64 62 2e 50 72 6f 64 75 63 74 73 0a 20 20 20   db.Products.   
1840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1850: 20 20 20 77 68 65 72 65 20 70 2e 4f 72 64 65 72     where p.Order
1860: 44 65 74 61 69 6c 73 2e 43 6f 75 6e 74 28 6f 64  Details.Count(od
1870: 20 3d 3e 20 6f 64 2e 4f 72 64 65 72 73 2e 43 75   => od.Orders.Cu
1880: 73 74 6f 6d 65 72 73 2e 43 6f 75 6e 74 72 79 20  stomers.Country 
1890: 3d 3d 20 70 2e 53 75 70 70 6c 69 65 72 73 2e 43  == p.Suppliers.C
18a0: 6f 75 6e 74 72 79 29 20 3e 20 32 0a 20 20 20 20  ountry) > 2.    
18b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c0: 20 20 73 65 6c 65 63 74 20 70 3b 0a 0a 20 20 20    select p;..   
18d0: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
18e0: 50 72 6f 64 75 63 74 73 20 70 20 69 6e 20 71 75  Products p in qu
18f0: 65 72 79 29 0a 20 20 20 20 20 20 20 20 20 20 7b  ery).          {
1900: 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e  .            Con
1910: 73 6f 6c 65 2e 57 72 69 74 65 4c 69 6e 65 28 70  sole.WriteLine(p
1920: 2e 50 72 6f 64 75 63 74 4e 61 6d 65 29 3b 0a 20  .ProductName);. 
1930: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
1940: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 20 20     }.      }..  
1950: 20 20 20 20 2f 2f 0a 20 20 20 20 20 20 2f 2f 20      //.      // 
1960: 4e 4f 54 45 3a 20 28 4a 4a 4d 29 20 52 65 6d 6f  NOTE: (JJM) Remo
1970: 76 65 64 20 6f 6e 20 32 30 31 31 2f 30 37 2f 30  ved on 2011/07/0
1980: 36 2c 20 6d 61 6b 65 73 20 69 74 20 68 61 72 64  6, makes it hard
1990: 65 72 20 74 6f 20 72 75 6e 20 74 68 69 73 20 45  er to run this E
19a0: 58 45 20 76 69 61 0a 20 20 20 20 20 20 2f 2f 20  XE via.      // 
19b0: 20 20 20 20 20 20 74 68 65 20 6e 65 77 20 75 6e        the new un
19c0: 69 74 20 74 65 73 74 20 73 75 69 74 65 2e 0a 20  it test suite.. 
19d0: 20 20 20 20 20 2f 2f 0a 20 20 20 20 20 20 2f 2f       //.      //
19e0: 20 43 6f 6e 73 6f 6c 65 2e 52 65 61 64 4b 65 79   Console.ReadKey
19f0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74  ();....      ret
1a00: 75 72 6e 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  urn 0;.    }.  }
1a10: 0a 7d 0a                                         .}.