2010-11-27 22 views
2

OK所以我知道爲什麼我遇到了錯誤。我不知道如何解決它。基本上,如果用戶沒有特定的權限,我需要加入另一個表。但是.NET非常挑剔,我不能在IF語句中做兩個不同的查詢,然後在if語句之外使用它。我可以爲此想到一些醜陋的工作,但我寧願不要。我對.NET相當陌生,我知道它足夠危險。使用相同變量綁定不同的LINQ數據源w/if語句

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.DataQuery 1[VB$AnonymousType_1 11 [的System.Guid,System.String,System.String,System.String,System.String,系統.Nullable 1[System.DateTime],System.Nullable 1 [System.DateTime],System.Nullable 1[System.Guid],System.Nullable 1 [System.DateTime],System.Nullable 1[System.Guid],System.Nullable 1 [System.DateTime]]]'鍵入'System.Collections.Generic.IEnumerable`1 [Ten11CRMLib.Company ]」。

因爲這樣:Dim l IEnumerable(Of Company)它不僅僅是一個公司的IEnumerable,它有它的源頭。我必須明確地選擇源在我的數據網格中使用它。我能讓昏暗的東西讓它停止抱怨嗎?

回答

2

當Aliostad說剛剛綁定q,我知道這不會工作,但意識到我是多餘的。因爲我正在做明確的選擇並從兩個查詢中選擇相同的東西,而不是選擇*(這正是我在做IEnumerable(公司)時所做的),我只是在if語句之外Dim q IEnumerable。我不確定是否顯式選擇vs all對泛型IEnumerable工作有任何影響。我失去了在做,要使用q.count的能力,但我發現對於不同的解決方案,你可以在下面工作的代碼中看到:

Private Sub loadLeads() 
     Using db As New CRMDataDataContext(SQLConnectionString) 
      Dim q As IEnumerable 
      If CanViewAllLeads(User.Identity.Name, db) = True Then 
       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 
      Else 
       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 
     End If 
     If q.Cast(Of Company).Count > 0 Then 
      dgLeads.DataSource = q 
      dgLeads.DataBind() 
     Else 
      pnlLeads.Visible = False 
      pnlNoLeads.Visible = True 
     End If 
     End Using 
    End Sub 
2

您正在選擇一個自定義類 - 一個匿名類型。這不能被鑄造回你的Customer對象。

如果您確實需要這樣做,請創建一個轉換器方法(或者將其放在構造函數中),並傳遞該對象並初始化匿名類型的值。使用動態作爲對象的類型。

+0

我很抱歉,我再次向新的.NET,能你爲我需要做的事提供資源或文件,你有點過頭了。我想你是說我必須讓Dim l匿名,然後將它發送給一個方法,將它轉換爲我所需要的方式? – KacieHouser 2010-11-27 10:43:22

相關問題