這種說法不能直接翻譯成任何等價的SQL命令:
var patients = allpatients.Select(p => CreatePatient(p));
使用LINQ中的自定義擴展方法實體(EF數據上下文)常用的方法是先在模型上進行查詢(其能夠被翻譯成SQL語句),然後使用自定義擴展方法以外查詢上下文(這只是一個例子):
var patients = allpatients.Select(p => new Patient()
{
FIRSTNAME = p.FIRSTNAME,
MIDDLENAME = p.MIDDLENAME,
SURNAME = p.SURNAME
});
foreach (Patient pt in patients)
{
// iterate through Patient collection
// use your custom method here
}
注意,相同的錯誤也會發生如果自定義方法變得LINQ查詢內部的new
模型分配像本實施例中的一部分:
var patients = allpatients.Select(p => new Patient()
{
PATIENTID = ToInt32(p.PATIENTID), // ToInt32 is a custom extension method, e.g. converting string to int
FIRSTNAME = p.FIRSTNAME,
MIDDLENAME = p.MIDDLENAME,
SURNAME = p.SURNAME
});
這是上述使用的正確的方法:
var patients = allpatients.Select(p => new Patient()
{
PATIENTID = p.PATIENTID, // leave the selected property as-is
FIRSTNAME = p.FIRSTNAME,
MIDDLENAME = p.MIDDLENAME,
SURNAME = p.SURNAME
});
// another method content
foreach (Patient pt in patients)
{
other.PATIENTID = ToInt32(pt.PATIENTID);
}
參考:
LINQ to Entities does not recognize the method
我可以,但我嘗試使用Model Factory,並將創建方法移動到另一個類。我試圖理解爲什麼錯誤。 – Simsons
錯誤只是告訴'CreatePatient'方法不能被翻譯成SQL語句,你需要把它放在查詢語境之外。 –