Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
|
fw:othersnet:linq [2009/05/04 14:29] alfred |
fw:othersnet:linq [2020/05/09 09:25] (actual) |
||
|---|---|---|---|
| Línea 300: | Línea 300: | ||
| .Take(3); | .Take(3); | ||
| </code> | </code> | ||
| + | |||
| + | |||
| ==== Skip ==== | ==== Skip ==== | ||
| Coge los últimos números saltandose los indicados | Coge los últimos números saltandose los indicados | ||
| Línea 310: | Línea 312: | ||
| </code> | </code> | ||
| + | |||
| + | |||
| + | ===== Otros ===== | ||
| + | |||
| + | |||
| + | ==== let ==== | ||
| + | La clausula ''let'' permite crear una variable dentro del ámbito de la query y utilizarla en la condición. | ||
| + | |||
| + | <code csharp> | ||
| + | var lArrivals = from a in db.PIU_ARRIVALS | ||
| + | let t = (DateTime.Now - a.updatedLocalTime) | ||
| + | where (t.Seconds > seconds) | ||
| + | select a; | ||
| + | </code> | ||
| + | ... O ... | ||
| + | <code csharp> | ||
| + | from car in root.Elements("car") | ||
| + | let profiles = | ||
| + | from profile in car.Elements("profile") | ||
| + | select new { | ||
| + | Name = profile.Attribute("name").Value, | ||
| + | Value = profile.Attribute("value").Value | ||
| + | } | ||
| + | let supports = | ||
| + | from support in car.Elements("support") | ||
| + | select new { | ||
| + | Name = support.Attribute("name").Value, | ||
| + | Value = support.Attribute("value").Value | ||
| + | } | ||
| + | select new Car { | ||
| + | Name = car.Attribute("name").Value, | ||
| + | Vendor = profiles.Single(prof => prof.Name == "Vendor").Value, | ||
| + | Model = profiles.Single(prof => prof.Name == "Model").Value, | ||
| + | Doors = int.Parse(profiles.Single(prof => prof.Name == "Doors").Value), | ||
| + | RacingSupport = supports.Single(sup => sup.Name == "Racing").Value == "yes" | ||
| + | }; | ||
| + | </code> | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ===== Ejemplos ===== | ||
| + | === Ejemplo 1 === | ||
| + | SQL: | ||
| + | <code sql> | ||
| + | SELECT SAE_LINEASPIENPANELINFO.INUMEROORDEN, SAE_LINEASPIENPANELINFO.SNOMBRELINEA, SAE_LINEASPIENPANELINFO.SNOMBREDESTINO, | ||
| + | SAE_LINEASPIENPANELINFO.IIDLINEA, SAE_LINEASPIENPANELINFO.IIDTRAYECTO, SAE_LINEASPIENPANELINFO.IIDPARADA | ||
| + | FROM SAE_LINEASPIENPANELINFO, SAE_CONFBIENPROGRAMADAS | ||
| + | WHERE SAE_LINEASPIENPANELINFO.IIDPARADA = {0} AND SAE_LINEASPIENPANELINFO.IIDPANELINFO = {1} | ||
| + | AND SAE_CONFBIENPROGRAMADAS.IIDCONFLINEASACTUAL = SAE_LINEASPIENPANELINFO.IIDCONFIGURACIONLINEASPI | ||
| + | AND SAE_CONFBIENPROGRAMADAS.IIDPANELINFO = {1} | ||
| + | ORDER BY SAE_LINEASPIENPANELINFO.INUMEROORDEN | ||
| + | </code> | ||
| + | LINQ: | ||
| + | <code csharp> | ||
| + | var dades = from linies in dbdc.SAE_LINEASPIENPANELINFO | ||
| + | from conf in dbdc.SAE_CONFBIENPROGRAMADAS | ||
| + | orderby linies.INUMEROORDEN | ||
| + | where ((linies.IIDPARADA == p.IIDPARADA) && | ||
| + | (linies.IIDPANELINFO == codi) && | ||
| + | (conf.IIDCONFLINEASACTUAL == linies.IIDCONFIGURACIONLINEASPI) && | ||
| + | (conf.IIDPANELINFO == codi)) | ||
| + | select new | ||
| + | { | ||
| + | INUMEROORDEN = linies.INUMEROORDEN, | ||
| + | SNOMBRELINEA = linies.SNOMBRELINEA, | ||
| + | SNOMBREDESTINO = linies.SNOMBREDESTINO, | ||
| + | IIDLINEA = linies.IIDLINEA, | ||
| + | IIDTRAYECTO = linies.IIDTRAYECTO, | ||
| + | IIDPARADA = linies.IIDPARADA | ||
| + | }; | ||
| + | </code> | ||
| + | === Ejemplo 2 (combinación) === | ||
| + | Esto... | ||
| + | <code> | ||
| + | var id_paradas = (from pt in db.SAE_PARADASTRAYECTO | ||
| + | where (pt.IIDLINEA == idLinia) | ||
| + | select pt.IIDPARADA.GetValueOrDefault(-1)).Distinct(); | ||
| + | |||
| + | return (from p in db.SAE_PARADAS | ||
| + | from id in id_paradas | ||
| + | where (p.IIDPARADA == id) | ||
| + | select p).ToList(); | ||
| + | </code> | ||
| + | Es igual a... | ||
| + | <code> | ||
| + | return (from p in db.SAE_PARADAS | ||
| + | from id in ((from pt in db.SAE_PARADASTRAYECTO | ||
| + | where (pt.IIDLINEA == idLinia) | ||
| + | select pt.IIDPARADA.GetValueOrDefault(-1)).Distinct()) | ||
| + | where (p.IIDPARADA == id) | ||
| + | select p).ToList(); | ||
| + | </code> | ||
| + | === Ejemplo 3 (NOT IN) === | ||
| + | <code> | ||
| + | var query = | ||
| + | from c in dc.Customers | ||
| + | where !(from o in dc.Orders | ||
| + | select o.CustomerID) | ||
| + | .Contains(c.CustomerID) | ||
| + | select c; | ||
| + | foreach (var c in query) Console.WriteLine( c ); | ||
| + | </code> | ||
| + | === Ejemplo 4 (FindAll y ForEach) === | ||
| + | <code> | ||
| + | static void DisplayInstalledApplications2() | ||
| + | { | ||
| + | string registryKey = | ||
| + | @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"; | ||
| + | |||
| + | using (Microsoft.Win32.RegistryKey key = | ||
| + | Registry.LocalMachine.OpenSubKey(registryKey)) | ||
| + | { | ||
| + | (from a in key.GetSubKeyNames() | ||
| + | let r = key.OpenSubKey(a) | ||
| + | select new | ||
| + | { | ||
| + | Application = r.GetValue("DisplayName") | ||
| + | }).ToList() | ||
| + | .FindAll(c => c.Application != null) | ||
| + | .ForEach(c => Console.WriteLine(c.Application)); | ||
| + | } | ||
| + | } | ||
| + | </code> | ||
| + | === Cálculo del tamaño de un directorio === | ||
| + | <code csharp> | ||
| + | static long DirectorySize(DirectoryInfo dInfo, bool includeSubDir) { | ||
| + | // Enumerate all the files | ||
| + | long totalSize = dInfo.EnumerateFiles() | ||
| + | .Sum(file => file.Length); | ||
| + | // If Subdirectories are to be included | ||
| + | if (includeSubDir) | ||
| + | { | ||
| + | // Enumerate all sub-directories | ||
| + | totalSize += dInfo.EnumerateDirectories() | ||
| + | .Sum(dir => DirectorySize(dir, true)); | ||
| + | } | ||
| + | return totalSize; | ||
| + | } | ||
| + | </code> | ||
| ===== Notas ===== | ===== Notas ===== | ||
| - | * En las querys LINQ podemos ver el código SQL generado; si se debuga se puede ver el comando sql. | + | * En las querys LINQ podemos ver el código SQL generado; si se debuga se puede ver el comando sql en la variable a la que se le ha asignado dicha query. |
| * El resultado de una sentencia LINQ puede ser asignada a un ''DataSource'' de un ''GridView''. Luego tendremos que llamar al método ''DataBind'' para que se muestren. | * El resultado de una sentencia LINQ puede ser asignada a un ''DataSource'' de un ''GridView''. Luego tendremos que llamar al método ''DataBind'' para que se muestren. | ||