una tablas soporta segundo rapida porque por optimizar mas lentas las hacer daƱan cuantas consultas consulta con como c# linq

c# - soporta - Crear un LINQ seleccionar de varias tablas



optimizar consultas lentas mysql (5)

Debe crear un nuevo tipo anónimo:

select new { op, pg }

Consulte la guide oficial.

Esta consulta funciona muy bien:

var pageObject = (from op in db.ObjectPermissions join pg in db.Pages on op.ObjectPermissionName equals page.PageName where pg.PageID == page.PageID select op) .SingleOrDefault();

Obtengo un nuevo tipo con mis campos ''op''. Ahora quiero recuperar mis campos ''pg'' también, pero

select op, pg).SingleOrDefault();

no funciona

¿Cómo puedo seleccionar todo en ambas tablas para que aparezcan en mi nuevo tipo de páginaObjeto?


Puede usar tipos anónimos para esto, es decir:

var pageObject = (from op in db.ObjectPermissions join pg in db.Pages on op.ObjectPermissionName equals page.PageName where pg.PageID == page.PageID select new { pg, op }).SingleOrDefault();

Esto convertirá a pageObject en un IEnumerable de tipo anónimo, por lo que AFAIK no podrá pasarlo a otros métodos, sin embargo, si simplemente está obteniendo datos para jugar en el método en el que se encuentra actualmente, está perfectamente bien. También puede nombrar propiedades en su tipo anónimo, es decir:

var pageObject = (from op in db.ObjectPermissions join pg in db.Pages on op.ObjectPermissionName equals page.PageName where pg.PageID == page.PageID select new { PermissionName = pg, ObjectPermission = op }).SingleOrDefault();

Esto te permitirá decir:

if (pageObject.PermissionName.FooBar == "golden goose") Application.Exit();

Por ejemplo :-)


Si el tipo anónimo le causa problemas, puede crear una clase de datos simple:

public class PermissionsAndPages { public ObjectPermissions Permissions {get;set} public Pages Pages {get;set} }

y luego en tu consulta:

select new PermissionsAndPages { Permissions = op, Page = pg };

Entonces puedes pasar esto:

return queryResult.SingleOrDefault(); // as PermissionsAndPages


Si no desea utilizar tipos anónimos b / c, digamos que está pasando el objeto a otro método, puede usar la opción de carga LoadWith para cargar los datos asociados. Requiere que sus tablas estén asociadas ya sea a través de claves externas o en su modelo dbml Linq-to-SQL.

db.DeferredLoadingEnabled = false; DataLoadOptions dlo = new DataLoadOptions(); dlo.LoadWith<ObjectPermissions>(op => op.Pages) db.LoadOptions = dlo; var pageObject = from op in db.ObjectPermissions select op; // no join needed

Entonces puedes llamar

pageObject.Pages.PageID

Dependiendo de cómo se ve tu información, probablemente quieras hacer esto al revés,

DataLoadOptions dlo = new DataLoadOptions(); dlo.LoadWith<Pages>(p => p.ObjectPermissions) db.LoadOptions = dlo; var pageObject = from p in db.Pages select p; // no join needed var objectPermissionName = pageObject.ObjectPermissions.ObjectPermissionName;


cambio

select op)

a

select new { op, pg })