Esto es fácil de realizar en TSQL, ¡pero estoy aquí sentado golpeando mi cabeza contra el escritorio tratando de hacer que funcione en EF4!Entity Framework con agregado LINQ para concatenar cadena?
Tengo una tabla, vamos a llamarla TestData. Tiene campos, por ejemplo: DataTypeID, Name, DataValue.
DataTypeID, Name, DataValue
1,"Data 1","Value1"
1,"Data 1","Value2"
2,"Data 1","Value3"
3,"Data 1","Value4"
Quiero grupo de ID de datos/Nombre y concatenar DataValue en una cadena CSV. El resultado deseado debe contener -
DataTypeID, Name, DataValues
1,"Data 1","Value1,Value2"
2,"Data 1","Value3"
3,"Data 1","Value4"
Ahora, aquí es como yo estoy tratando de hacerlo -
var query = (from t in context.TestData
group h by new { DataTypeID = h.DataTypeID, Name = h.Name } into g
select new
{
DataTypeID = g.Key.DataTypeID,
Name = g.Key.Name,
DataValues = (string)g.Aggregate("", (a, b) => (a != "" ? "," : "") + b.DataValue),
}).ToList()
El problema es que LINQ a Entidades no sabe cómo convertir esto en SQL. Esto es parte de una unión de 3 consultas LINQ, y realmente me gustaría que siga así. Me imagino que podría recuperar los datos y luego realizar el agregado más tarde. Por razones de rendimiento, eso no funcionaría para mi aplicación. También consideré usar una función de servidor SQL. Pero eso simplemente no parece "correcto" en el mundo de EF4.
¿Alguien tiene cuidado de echarle un vistazo a esto?
Gracias, parece que si hubiera publicado esto como respuesta, sería el aceptado. Estoy bastante decepcionado, aunque no completamente sorprendido, esto no es posible. –
En general, si no puede hacerlo en SQL (razonablemente estándar), probablemente no pueda hacerlo en L2E. El SQL estándar no tiene una forma de tomar una lista arbitrariamente larga y concatenarla en una cadena. Puede escribir una función SQL/proc para esto, y puede llamar con L2E, sin embargo. –