LINQ - 查询Where方法错误

时间:2017-05-05 01:03:50

标签: vb.net visual-studio entity-framework linq runtime-error

我有以下代码,我无法使其正常工作。

我是使用Linq和Entity框架的新手。

我附加了代码示例,并且还附带了错误的图像。

我想做的是一段代码,我可以动态添加" Where" s。

Imports System.Linq
Private cntx As New attmanager_bdEntities()

Dim query = (From persona In cntx.tblperson
                        Select
                        ATT_TYPE = persona.att_type,
                        ATT_RECOG = persona.att_recog,
                        APELLIDO = persona.surname,
                        NOMBRE = persona.name,
                        PERSONA_ID = persona.id,
                        DNI = persona.identification,
                        DIRECCION = persona.address,
                        PIN = persona.att_pin,
                        TIPOASISTENCIA = persona.att_type,
                        EMAIL = persona.email,
                        EXTRA = persona.extra,
                        TELEFONO = persona.phone,
                        FECHANACIMIENTO = persona.birth,
                        SEXO = persona.sex,
                        DELETED = persona.deleted,
                        AREA_ID = persona.tblarea.id,
                        AREA = persona.tblarea.name,
                        CIUDAD = persona.tblcity.name,
                        CIUDAD_ID = persona.tblcity_id,
                        PROVINCIA = persona.tblcity.tblstate.name,
                        PAIS = persona.tblcity.tblstate.tblcountry.name
                        Where (DELETED = 0))

        query = query.Where(Function(a) a.AREA_ID = 1)

'Here I should put another "Where"s
dbgrid_listado.DataSource = query.ToList()

enter image description here

错误翻译:

  

意外异常试图加载"角色"   细节:   无法调用该方法,因为无法调用' Public Function Where ..........   ......   ......   ......   ......有了这些论点。   参数'谓词'该参数无法转换为VB $ AnonymousDelegate_0(Of Object,Object)'进入' String'

2 个答案:

答案 0 :(得分:0)

为什么不呢?

Dim query = (From persona In cntx.tblperson
             Where persona.DELETED = 0
             Select persona)

现在你的类型是" persona"而不是匿名类型的21个随机属性。

query = query.Where(Function(a) a.AREA_ID = 1)

使用匿名类型总是很棘手。另外,我总是选择最后一个......

您总是可以在匿名类型中列出属性,如下所示:

Dim query = (From persona In cntx.tblperson
            Where persona.DELETED = 0
            Select New With {
                        ATT_TYPE = persona.att_type,
                        ATT_RECOG = persona.att_recog,
                        APELLIDO = persona.surname,
                        NOMBRE = persona.name,
                        PERSONA_ID = persona.id,
                        DNI = persona.identification,
                        DIRECCION = persona.address,
                        PIN = persona.att_pin,
                        TIPOASISTENCIA = persona.att_type,
                        EMAIL = persona.email,
                        EXTRA = persona.extra,
                        TELEFONO = persona.phone,
                        FECHANACIMIENTO = persona.birth,
                        SEXO = persona.sex,
                        DELETED = persona.deleted,
                        AREA_ID = persona.tblarea.id,
                        AREA = persona.tblarea.name,
                        CIUDAD = persona.tblcity.name,
                        CIUDAD_ID = persona.tblcity_id,
                        PROVINCIA = persona.tblcity.tblstate.name,
                        PAIS = persona.tblcity.tblstate.tblcountry.name
                        })

使用anon类型的where子句可能会搞乱它并使用persona.DELETED = 0会有所帮助吗?

答案 1 :(得分:0)

我明白了......

我创建了一个新项目

我将所有资源(例如图片)从旧项目迁移到新项目。

打开NuGet包管理器,并安装EF6 还安装了MySQL.Data和MySQL EF6提供程序。

我将表单从原始项目导入到新项目中。

现在我可以按照你们的建议去做。

问题??? .... .Net框架上的版本,以及我正在使用的EF。

我没有更新所有内容。