2009-05-03 79 views
2

我有一個與this one有關的問題。我不想做一個計算(聚合),但我需要從關聯中獲取顯示值。在我的C#代碼中,我可以直接引用該值,因爲外鍵約束使Linq生成了所有必要的連線。 當我將IQueryable指定爲Gridview數據源屬性並引用不是結果集中主要實體的列的內容時,出現該列不存在的錯誤。 作爲Linq的新手,我猜測賦值隱含地將IQueryable轉換爲列表,並且關聯丟失。 我的問題是,有什麼好辦法做到這一點?Linq to SQL和Gridview數據源

我假設我可以通過編寫一個並行查詢來返回一個匿名類型,該類型包含gridview所需的所有列。看起來,通過這樣做,我可以在內存中冗餘地保存已有的數據。我可以在分配數據源時即時查詢內存中的數據結構嗎?還是有更直接的解決方案?

gridview應該顯示醫生的醫療組關聯,並且關聯的名稱位於查找表中。

  IQueryable<Physician> ph = 
         from phys in db.Physicians 
         //from name in phys.PhysicianNames.DefaultIfEmpty() 
         //from lic in phys.PhysicianLicenseNums.DefaultIfEmpty() 
         //from addr in phys.PhysicianAddresses.DefaultIfEmpty() 
         //from npi in phys.PhysicianNPIs.DefaultIfEmpty() 
         //from assoc in phys.PhysicianMedGroups.DefaultIfEmpty() 
         where phys.BQID == bqid 
         select phys; 

alt text http://heeroz.com/phys.jpg

因此,根據丹尼斯的回答,我刪除了所有不必要的東西從我的查詢。我想我可能不會問正確的問題。

無論如何,該頁面顯示的是醫生的數據。我想在網格中顯示所有醫療組織關聯關係(並讓用戶插入,編輯和更新關聯關係)。我現在意識到我不需要明確地加入這些其他表格--Linq爲我做了。通過引用兒童關聯鏈,我可以訪問位於單獨表格中的許可證編號。 我不能在GridView,這使我回到我的問題引用醫療組名稱:

AffiliationGrid.DataSource = ph.First().PhysicianMedGroups; 

這是不行的,因爲med_group_print_name不能訪問爲GridView:

A field or property with the name 'med_group_print_name' was not found on the 
selected data source. 

同樣,忍受着我,如果我明白我不明白Linq ......因爲我不明白。

回答

1

您的查詢似乎很奇怪。您應該嘗試在您的網格中簡單顯示

ph = from phys in db.Physicians 
    where phys.BQID == bqid 
    select phys; 

。這應該工作。 另外,爲什麼要調用Load()?如果在網格綁定時不放置DataContext,則不需要它。

如果還有問題,可以請張貼您收到錯誤信息,這將有助於...

第2部分

的問題是,你的名字是不能有效的PhysMedGroup 。您需要將某個級別導航到MedGroupLookup以訪問該名稱,因爲它是該類的一個屬性。

根據您使用的技術(它似乎是WinForms或Web窗體),您需要配置數據綁定以訪問MedGroupLookup.med_group_print_name。

+0

是的,我認爲可能不需要負載。我修改了我的問題。 – cdonner 2009-05-03 23:52:53