2016-09-02 90 views
-1

我正在同時學習實體框架和Linq。我可以得到一個表到網格這個如何從與實體框架名稱相同的字段中加入實體框架字段子集

List<object> boel; 

var query = from BillingOrderEntries boe in DM.BillingOrderEntries 
    select boe; 

boel = query.ToList(); 
dataGridView1.DataSource = boel; 

但我有困難試圖讓兩個表之間字段的子集。我認爲加入是正確的,因爲我已經看過幾個例子。

var boel = new[] { new { DateOfBirth= default(DateTime?), FirstName = "", LastName = "", AccessionField = "", Requisition = "" } }.ToList(); 

var query = from a in DM.Accessions 
    join boe in DM.BillingOrderEntries on a.Accession1 equals boe.Accession 
    orderby boe.LastName 
    select new { boe.DateOfBirth, boe.FirstName, boe.LastName, a.Accession, a.Requisition } 

boel = query.ToList(); 
dataGridView1.DataSource = boel; 

問題是Accession表中它有一個Accession列。我嘗試將該類的名稱更改爲AccessionTable,然後修改該屬性以在上下文類中反映此情況,但無論是這樣做還是我錯過了某處。然後我將Accession類中的屬性更改爲AccessionField。它編譯但不會運行:

LINQ to Entities不支持指定的類型成員'AccessionField'。僅支持初始化程序,實體成員和實體導航屬性。

我無法更改數據庫,但我可以更改任何可以使其工作的代碼。

回答

0

你可以在選擇子句中使用別名爲字段,如下圖所示,注意這個例子只是嘲笑你引用模仿你的代碼,並演示瞭如何選擇條款混淆類:

修訂

/* Mock class */ 
    public class Accession 
    { 
     [Column("Accession")] 
     public string AccessionField { get; set; } 
     public string Requisition { get; set; } 
    } 

    /* Mock class */ 
    public class Billing 
    { 
     public string Accession { get; set; } 
     public string DateOfBirth { get; set; } 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
    } 

    /* Mock class */ 
    public class DataManager 
    { 
     public IEnumerable<Accession> Accessions { get; set; } 
     public IEnumerable<Billing> BillingOrderEntries { get; set; } 
    } 

    public static void Main(string[] args) 
    { 
     /* Start: Generate fake data */ 
     DataManager DM = new DataManager(); 
     DM.Accessions = new List<Accession>() { new Accession { AccessionField = "a1", Requisition="r1" }, new Accession { AccessionField = "a2", Requisition = "r2" } }; 
     DM.BillingOrderEntries = new List<Billing>() { new Billing { Accession = "a1", DateOfBirth = "01-01-2016", FirstName = "first1", LastName="last1" }, new Billing { Accession = "a2", DateOfBirth = "02-02-2016", FirstName = "first2", LastName = "last2" } }; 
     /* End: Generate fake data */ 

     var query = from a in DM.Accessions 
        join boe in DM.BillingOrderEntries on a.AccessionField equals boe.Accession 
        orderby boe.LastName 
        select new { 
         boe.DateOfBirth, 
         boe.FirstName, 
         boe.LastName, 
         a.AccessionField, 
         a.Requisition 
        }; 

     var boel = query.ToList(); 
    } 
+0

您的結構與問題不符。我有一個與表格名稱相同的字段。這是我需要知道如何解決的。 – John

+0

如何更改我的結構以匹配問題?你可以更新你的問題的代碼澄清? – sly

+0

更改公共類訪問公共類加入 – John