asp.net - 使用相同变量 with/if 语句绑定(bind)不同的 LINQ 数据源

标签 asp.net vb.net linq

好的,所以我知道为什么我会遇到错误。我不知道如何解决它。基本上,如果用户没有特定的权限,我需要加入另一个表。但是 .NET 非常挑剔,我不能只在 IF 语句中进行两个不同的查询,然后在 if 语句之外使用它。我可以想到一些丑陋的解决方法,但我宁愿不这样做。我对 .NET 还很陌生,我所知道的就足够危险了。

Private Sub loadLeads()
        Using db As New CRMDataDataContext(SQLConnectionString)
            Dim count = 0
            Dim l As IEnumerable(Of Company)
            If CanViewAllLeads(User.Identity.Name, db) = True Then
                Dim q = From leads In db.Companies _
                        Join s In db.CompanySources On s.CompanySourceID Equals leads.CompanySourceID _
                        Where leads.Active = True And leads.CompanyStatusID = 1 _
                        Select leads.CompanyID, _
                                leads.BusinessName, _
                                leads.Website, _
                                leads.Phone, _
                                leads.Fax, _
                                leads.LastContacted, _
                                leads.FollowUp, _
                                leads.CreatedBy, _
                                leads.Created, _
                                leads.UpdatedBy, _
                                leads.Updated, _
                                Source = s.Source
                count = q.Count
                l = q
            Else
                Dim q = From leads In db.Companies _
                    Join s In db.CompanySources On s.CompanySourceID Equals leads.CompanySourceID _
                    Join xref In db.UserCompaniesXrefs On leads.CompanyID Equals xref.CompanyID _
                    Where leads.Active = True And leads.CompanyStatusID = 1 And xref.UserID = NCGuid(User.Identity.Name) _
                    Select leads.CompanyID, _
                            leads.BusinessName, _
                            leads.Website, _
                            leads.Phone, _
                            leads.Fax, _
                            leads.LastContacted, _
                            leads.FollowUp, _
                            leads.CreatedBy, _
                            leads.Created, _
                            leads.UpdatedBy, _
                            leads.Updated, _
                            Source = s.Source
                count = q.Count
                l = q
            End If
            If count > 0 Then
                dgLeads.DataSource = l
                dgLeads.DataBind()
            Else
                pnlLeads.Visible = False
                pnlNoLeads.Visible = True
            End If
        End Using
    End Sub

我收到错误:无法转换类型为“System.Data.Linq.DataQuery1[VB$AnonymousType_111[System.Guid,System.String,System.String,System.字符串,System.String,System.Nullable1[System.DateTime],System.Nullable1[System.DateTime],System.Nullable1[System.Guid],System.Nullable1[System.DateTime],System.Nullable1[System.Guid],System.Nullable1[System.DateTime]]]' 键入 'System.Collections.Generic.IEnumerable` 1[Ten11CRMLib.Company]'。

因为这样: Dim l As IEnumerable(Of Company) 它不仅仅是公司的 IEnumerable,它还有其中的源代码。我必须明确选择源才能在我的数据网格中使用它。我可以给 Dim l 做一些让它停止提示的东西吗?

最佳答案

您正在选择返回自定义类 - 匿名类型。这无法转换回您的 Customer 对象。

如果您确实需要这样做,请创建一个转换器方法(或者可能将其放在构造函数上)并传递对象并初始化匿名类型的值。使用动态作为对象类型。

关于asp.net - 使用相同变量 with/if 语句绑定(bind)不同的 LINQ 数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4291137/

相关文章:

asp.net - 无法在 IIS(Windows 10)上运行 ASP.net 服务 - 错误 404(未找到)

c# - 如何使用 lambda 表达式进行验证以验证某个小时是否为某个 "type"(必须为 hh :00 or hh:30)

javascript - 通过 asp.net 访问记事本、计算器

mysql - 如何加快vb.net中listview的填充速度

c# - ASP.NET OpenXML : How to create password protected word file

asp.net - ASP 创建对象时没有此类接口(interface)支持错误

每秒在 ASP.net 头部创建 Javascript,Ajax Timer 导致问题

c# - Linq 选择 : Set specific value for first occurrence only

c# - 对象列表和对象列表的相交列表

c# - 用于检索可以为空的属性的 Lambda 表达式