2012-01-17 44 views
6

我有以下實體框架 - 無法創建類型x的常量值。在此上下文中僅支持基本類型。

一個工程師型號:

public class engineers 
{ 
    public Guid? Guid { get; set; } 
    public string Name { get; set; } 
} 

我填用正確的方式與一個工程師的名單:

List<engineers> listeng = new List<engineers>(); 
listeng.Add(new engineers { Name = profile.FirstName + " " + profile.LastName, Guid = GuidEngineer }); 

到目前爲止好。

我的問題我怎麼可以拉工程師的名字下面的工程項:

var tickets = from o in new HelpdeskEntities().Tickets.Where(t => t.TicketState.State == "Open") 
        select new AjaxTickets 
        { 
         TicketID = o.TicketID, 
         TicketSubject = o.TicketSubject, 
         ClientCompanyName = o.ClientCompany.ClientCompanyName, 
         DateOpened = o.DateOpened, 
         **eng** = list.Where(x => x.Guid == o.EngineerID).Select(x => new engineers {Guid = x.Guid, Name=x.Name }).FirstOrDefault().Name 

        }; 

我也試過

var tickets = from o in new HelpdeskEntities().Tickets.Where(t => t.TicketState.State == "Open") 
        select new AjaxTickets 
        { 
         TicketID = o.TicketID, 
         TicketSubject = o.TicketSubject, 
         ClientCompanyName = o.ClientCompany.ClientCompanyName, 
         DateOpened = o.DateOpened, 
         **eng** = list.Where(x => x.Guid == o.EngineerID).Select(x => x.Name }).FirstOrDefault() 
        }; 

我得到的錯誤是:

Unable to create a constant value of type 'Helpdesk2.ViewModel.engineers'. Only primitive types ('such as Int32, String, and Guid') are supported in this context."} 

我有點理解,但不能弄清楚只是選擇工程師的名字。

在此先感謝

+2

你不能在Linq-to-entities查詢中使用你的'list'。只能使用數據庫中存在的數據。您不能任意組合linq-to-objects和linq-to-entities,因爲EF不知道如何將其轉換爲SQL。從數據庫加載票據後,使用@ harriyott的解決方法並填充'Name'。 – 2012-01-17 13:30:25

回答

3

您應該能夠簡化第一個:

list.FirstOrDefault(x => x.Guid == o.EngineerID).Name 

話雖如此,實體框架可能不會讓你在運行了一個數據庫調用時。如果您可以從工單到工程師製作外鍵,那麼您可以使用與客戶公司名稱相同的方式進行選擇。如果沒有,那麼你需要做的兩個雲:首先,運行不選擇填充工程師name屬性,在那之後,填補他們在喜歡的東西:

tickets.ForEach(ticket => ticket.EngineerName = engineers.First(eng => eng.Guid == ticket.EngineerID).Name) 

顯然你需要添加EngineerID屬性並在第一步中選擇它。

+0

填寫名稱後綴的工作,並沒有很好地填寫名稱。 – user1153881 2012-01-18 15:12:03

+0

如果沒有實際的代碼和數據庫來運行它,很難精確地測試會發生什麼(因此我爲什麼寫了類似的東西)。你有沒有嘗試過設置一個斷點並檢查'ticket'和'engineers'中的內容? – harriyott 2012-01-19 11:21:28

+0

好吧,我不得不把結果發送到一個新的變量,然後執行解決方法 – user1153881 2012-01-21 21:06:37

相關問題