c # linq: cómo recuperar datos de un registro devuelto

Entonces tengo la consulta:

 var query =
                from product in db.LUT_ProductInfos
                where product.flavor == flavor && product.Container == container
                select flavor;

que devuelve 1 registro (siempre debe devolver un registro). ¿Cómo extraigo valores de atributos individuales del resultado? Por ejemplo, si devuelve 1 registro con 3 columnas como firstName lastName phoneNumber, y quiero hacer algo con cada uno de los valores como

string fName = firstName
string lName = lastName
int pNumber = phoneNumber

sin entrar en el mapeo de datos para objetos, ¿cuál es la forma más directa de extraer esos valores de la consulta de la variable de resultado?

preguntado el 16 de mayo de 11 a las 20:05

4 Respuestas

var query =
            from product in db.LUT_ProductInfos
            where product.flavor == flavor && product.Container == container
            select new {product.Foo, product.flavor.Bar, ...};

var row = query.First(); // or Single(), FirstOrDefault(), SingleOrDefault()

string foo = row.Foo;
int bar = row.Bar;
...

Esto tiene la ventaja de que solo las propiedades deseadas se incluyen en el SELECT declaración, y no hay viajes de ida y vuelta adicionales ocultos (carga diferida).

contestado el 17 de mayo de 11 a las 00:05

var singleResult =
            (from product in db.LUT_ProductInfos
            where product.flavor == flavor && product.Container == container
            select flavor).Single();
string fName = singleResult.firstName
string lName = singleResult.lastName
int pNumber = singleResult.phoneNumber

contestado el 17 de mayo de 11 a las 00:05

Estoy bastante seguro de que debes seleccionar el producto y no el sabor. - juharr

var row = db.LUT_ProductInfos
    .SingleOrDefault(product => product.flavor == flavor && product.Container == container);

if (row != null)
{
    string firstName = row.fName;
    string lastName = row.lName;
    string phone = row.pNumber;
}

contestado el 17 de mayo de 11 a las 00:05

La mejor y más sencilla forma de hacer esto es recodificar así:

var query =
                (from product in db.LUT_ProductInfos
                where product.flavor == flavor && product.Container == container
                select flavor).FirstOrDefault();

devolverá el primer registro coincidente. Si no hay un registro coincidente, devolverá un valor nulo; de lo contrario, devolverá un objeto de la clase LUT_ProductInfos. también puede omitir registros como desee de esta manera:

var query =
                (from product in db.LUT_ProductInfos
                where product.flavor == flavor && product.Container == container
                select flavor).Skip(25).FirstOrDefault();

contestado el 17 de mayo de 11 a las 00:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.