Pregunta

Hola! Estoy tratando de escribir una clase POCO adecuada en F # ... Pero algo está mal ..

El código C # que quiero "traducir" a F # adecuada es:

public class MyTest
{
    [Key]
    public int ID { get; set; }

    public string Name { get; set; }
}

Lo más cerca que puedo llegar al código anterior en Fa # es algo como:

type Mytest() =

    let mutable _id : int = 0;
    let mutable _name : string = null;

    [<KeyAttribute>]
    member x.ID
        with public get() : int = _id
        and  public set(value) = _id <- value

    member x.Name 
        with public get() : string = _name
        and  public set value = _name <- value

Sin embargo, cuando intento acceder a las propiedades de la versión F # simplemente devuelve un error de compilación diciendo

"búsqueda del objeto de tipo indeterminado sobre la base de la información antes de este punto del programa. Un tipo de anotación puede ser necesaria antes de este punto del programa para restringir el tipo de objeto. Esto puede permitir que las operaciones de búsqueda que se resuelva. "

Las eso es código que tratan de obtener la propiedad es una parte de mi repositorio (estoy usando Código EF primero).

module Databasethings =

    let GetEntries =
        let ctx = new SevenContext()
        let mydbset = ctx.Set<MyTest>()
        let entries = mydbset.Select(fun item -> item.Name).ToList() // This line comes up with a compile error at "item.Name" (the compile error is written above)
        entries

¿Qué demonios está pasando?

Gracias de antemano!

¿Fue útil?

Solución

Su definición de clase está muy bien, es su LINQ que tiene un problema. El método Select espera un argumento de tipo Expression<Func<MyTest,T>> pero estás pasándolo a un valor de tipo FSharpFunc<MyTest,T> -. O algo similar a eso de todos modos

El punto es que no se puede usar F # expresiones lambda directamente con LINQ. Usted tiene que escribir su expresión como un F # Cotización y luego usar el < a href = "http://fsharppowerpack.codeplex.com/" rel = "noreferrer"> F # PowerPack para ejecutar el código en un origen de datos IQueryable<>. Don Syme tiene un buena visión general de cómo funciona este .

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