Pregunta

Soy nuevo en PLINQO, soy bastante nuevo en LINQ2SQL e I & # 8217; m agrego un nuevo DAL (llamado DAL2) en paralelo con nuestro antiguo DAL existente. Nuestra idea es comenzar a usar linq2sql para cada cosa nueva que agreguemos y comenzar a mover lentamente el uso antiguo de DAL al nuevo DAL2.

Como todos sabemos, DLINQ es bueno para cosas simples pero en escenarios más complicados (muchos, muchos objetos, deattached, etc.) surgen de manera instantánea y hay una nueva necesidad de hackear. PLINQO (junto con CodeSmish) viene al rescate y agrega toda la estructura y las herramientas necesarias para que sea más utilizable. Hasta ahora tan bueno.

Ahora ya tengo mi DAL2 (estoy utilizando Administradores). Es & # 8220; funciona & # 8221 ;. Pero tengo algunas dudas.

Entiendo que devolver un objeto compuesto de la siguiente consulta:

select name,  Count(*) as Total from SomeTable 

& # 8230; no es un escenario extraño en la mayoría de las aplicaciones de DB. La consulta es un ejemplo simple de lo que sería un buen tipo anónimo.

Ahora, por un segundo, imagine una estructura de tabla como esta.

Tag (1) <—> (n) PatientTag (n) <—> (1) Patient

La idea es saber cuántos pacientes tiene cada etiqueta. Una simple unión interna solucionaría esto con SQL, entre la etiqueta y la etiqueta del paciente. Ni siquiera necesito acceso a la tabla de Pacientes para eso. (Solo necesito la cuenta).

Después de todo, todo lo que quiero es, por ejemplo:

TAG1, 33

TAG2, 21

TAG3, 6

etc & # 8230;

Supongamos que logro crear una consulta linq2sql que lo hace:

   var result1 = from pt in dc.PatientTag
                 join t in dc.Tag on pt.TagId equals t.TagId
                 select new { TagName = t.TagName };


   var result2 = from q in result1
                 group q by q.TagName into gp
                 select new { TagName = gp.Key, Total = gp.Count() };

(Soy nuevo en LINQ, así que si lo anterior no es bueno, perdone mi falta de & # 8220; LINQissm & # 8221;)

Dado que no puedo devolver ese & # 8220; nuevo & # 8221; tipo anónimo (a menos que vaya a Objeto y reflexión que no es mi intención), asumo que tengo que crear un & # 8220; helper & # 8221; Clase para contener las dos cosas (nombre y total). La idea es que el código anterior se encuentre en algún lugar de la capa de datos o de la capa empresarial, y no en el código de la interfaz de usuario & # 8217; s

Ahora la verdadera pregunta:

Si lo anterior es cierto, ¿dónde debería crear ese & # 8220; helper & # 8221; ¿Si quiero devolver ese resultado (o una variedad de resultados) a una UI (para una visualización y manejo adecuados)?

1) En DAL2 / Helper / TagNameTotal.cs (para poner un ejemplo)

2) ¿En un BLayer / Helpers / TagNameTotals.cs?

3) ¿Ninguna de las anteriores? (o cualquiera?)

Si lo anterior es no verdadero , ¿en qué estoy pensando incorrectamente?

¿No es normal que alguien quiera pasar el resultado de una consulta a la interfaz de usuario y modificarlo? Diga en el ejemplo anterior que me gustaría cambiar el Nombre de etiqueta en la interfaz de usuario (tal vez ese & # 8217; s no sea el mejor ejemplo, pero se aplica).

Disculpe, pero todavía encuentro que todo el LINQ2SQL es un poco tosco cuando se usa fuera de un proyecto web o una aplicación simple. Estas son cosas básicas que hemos estado haciendo con ADO.NET (y conjuntos de registros anteriores) para siempre.

Haga una selección / unirse / grupo / crazySQL, modifique, confirme los cambios nuevamente.

PLINQO es bueno porque elimina la molestia de LINQ2SQL en su forma cruda (muchas, muchas, deatached, regeneración de contexto, caché, etc.), pero aún es LINQ, por lo que deben aplicarse las prácticas de DLINQ.

¿Qué me estoy perdiendo?

nota : no confunda PLinq con PLinqO.

¿Fue útil?

Solución

He respondido esta publicación en la codesmith community , sin embargo estaba Pensando en esto y me topé con este post. Puede encontrar esta publicación alguna ayuda

Básicamente, creas una mini clase y usas la declaración let para definir un subconjunto y luego lo carga lentamente cuando lo necesitas ...

Otros consejos

Esto me suena como un enchufe desvergonzado para el producto PLinqO. Espero que esta no sea tu intención. Miré a PLinqO y tal vez lo habría obtenido, excepto que tenía que comprar CodeSmith para obtenerlo. No gracias.

He construido una plataforma de 3 niveles con todas las funciones utilizando L2S, y encontré y traté los problemas relacionados con las relaciones M: M, las entidades separadas (especialmente con las actualizaciones), el manejo del contexto, etc. sin el uso de PLinqO y ningún otro Herramienta de terceros. Se puede hacer, una vez que entiendas cómo funciona L2S. Creo que nuestra solución es bastante elegante y nuestro rendimiento es bastante bueno.

Para aquellos que lean esto, si desea gastar dinero en herramientas de terceros, invierta en LinqPad y Linqer. Puede adquirir estas dos herramientas por menos de $ 75 en total; Ellos son fantasticos. Y no estoy asociado con ninguno de ellos.

Randy

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top