Especificar filas de retorno en LINQ2DataSet
-
08-07-2019 - |
Pregunta
Tengo un requisito para extraer un subconjunto distinto de filas de una DataTable, y pensé que LINQ2DataSets puede ser una forma útil y limpia de hacerlo, sin embargo, parece que no es posible identificar simplemente las filas de retorno de una consulta LINQ2DS como sigue
var result = from r in fips.AsEnumerable() select
r.Field<string>("FACILITY_PROCESS_SUB_GROUP_CODE"),
r.Field<string>("PROCESS_SUB_GROUP_NAME"),
r.Field<string>("...
cuando empiezo a recibir errores después de la primera coma.
¿Es esta una suposición correcta, y cómo podría evitarlo para devolver un subconjunto de columnas del conjunto de datos al que puedo aplicar un método Distinct ()?
Solución
Olvidó la nueva declaración y los nombres de campo:
var result = from r
in fips.AsEnumerable()
select new
{
FacProcess = r.Field<string>("FACILITY_PROCESS_SUB_GROUP_CODE"),
GroupName = r.Field<string>("PROCESS_SUB_GROUP_NAME"),
Item3 = r.Field<string>("Item3")
};
También puede declarar explícitamente que va a usar un tipo:
var result = from r
in fips.AsEnumerable()
select new MyType("InitClassParams")
{
FacProcess = r.Field<string>("FACILITY_PROCESS_SUB_GROUP_CODE"),
GroupName = r.Field<string>("PROCESS_SUB_GROUP_NAME"),
Item3 = r.Field<string>("Item3")
};
Scott Guthrie (VP Developer Devision, Microsoft) tiene buena información sobre LINQ (habla de LINQ to SQL, pero la mayoría se aplica independientemente).
Luego aplique la cláusula distinta:
var result = from r
in fips.AsEnumerable()
select new
{
FacProcess = r.Field<string>("FACILITY_PROCESS_SUB_GROUP_CODE"),
GroupName = r.Field<string>("PROCESS_SUB_GROUP_NAME"),
Item3 = r.Field<string>("Item3")
}
distinct;
Luego póngalo en una lista o repítalo. No se seleccionará / distinguirá / etc hasta que se ejecute algo como lo siguiente:
var list = result.ToList()
foreach(var item in result) {}