Ich erhalte den folgenden Fehler: "Ausdruck konnte nicht übersetzt werden ...", wenn ich versuche, eine Liste von Anfrageeinheiten zurückzugeben, die in eine benutzerdefinierte Klasse konvertiert wurden.Ausdruck konnte nicht übersetzt werden
Ich bin sehr neu in der Verwendung von Link auf diese Weise, in der Vergangenheit würde ich gespeicherte Prozedur in SQL verwenden und importieren Sie sie nur als Methoden, aber ich versuche, diese zu konvertieren.
Meine Methode, die eine Liste zurückgibt, ist:
public static List<EnquiryData> GetAllEnquiries()
{
var GridData = from a in Global.AcepakSalesPortal.Enquiries
join Cust in Global.AcepakSalesPortal.Customers
on a.CustomerID equals Cust.CustomerID into CustGroup
from b in CustGroup.DefaultIfEmpty()
join Pros in Global.AcepakSalesPortal.Prospects
on a.ProspectID equals Pros.ProspectID into ProsGroup
from c in ProsGroup.DefaultIfEmpty()
join Users in Global.AcepakSalesPortal.Users
on a.ResponsiblePartyID equals Users.UserID into UserGroup
from d in UserGroup.DefaultIfEmpty()
join Qt in Global.AcepakSalesPortal.Quotes
on a.QuoteID equals Qt.QuoteID into QuoteGroup
from e in QuoteGroup.DefaultIfEmpty()
join Usr in Global.AcepakSalesPortal.Users
on e.CreatedBy equals Usr.UserID into UsrGroup
from f in UsrGroup.DefaultIfEmpty()
join EnqCat in Global.AcepakSalesPortal.EnquiryCategories
on a.EnquiryCategoriesID equals EnqCat.EnquiryCatID into CatGroup
from g in CatGroup.DefaultIfEmpty()
join Clsd in Global.AcepakSalesPortal.Users
on a.ClosedBy equals Clsd.UserID into ClsdGroup
from h in ClsdGroup.DefaultIfEmpty()
orderby a.Created descending
select new EnquiryData
{
EnquiryID = a.EnquiryID,
ResponsiblePartyID = a.ResponsiblePartyID,
EnquiryNo = "ENQ" + a.EnquiryID.ToString().PadLeft(7, '0'),
EType = a.CustomerID.HasValue ? "C" : "P",
EnqCat = g.Code + " - " + g.Category,
ContactPerson = a.ProspectID.HasValue ? c.ContactPerson : "NOT INTEGRATED YET",
ContactNumber = a.ProspectID.HasValue ? c.ContactNum : "NOT INTEGRATED YET",
ContactEmail = a.ProspectID.HasValue ? c.ContactEmail : "NOT INTEGRATED YET",
Company = a.CustomerID.HasValue ? b.Name : c.CompanyName,
Description = a.Description,
AssignedTo = d.Name,
AddressBy = a.AddressBy,
EnquiryDate = a.Created,
EStatus = a.Closed.HasValue ? "Closed" : a.QuoteID.HasValue ? "Quoted" : "Open",
QuotedOn = a.QuoteID.HasValue ? e.Created.ToShortDateString() : "N/A",
QuotedBy = a.QuoteID.HasValue ? f.Name : "N/A",
QuoteNum = a.QuoteID.HasValue ? e.QuoteID.ToString().PadLeft(7, '0') : "N/A",
ClosedOn = a.Closed.HasValue ? a.Closed.Value.ToShortDateString() : "N/A",
ClosedBy = a.Closed.HasValue ? h.Name : "N/A",
Reason = a.Closed.HasValue ? a.ClosedReason : "N/A"
};
return GridData.ToList();
}
Und die benutzerdefinierte Klasse ist:
public class EnquiryData
{
public int EnquiryID { get; set; }
public int ResponsiblePartyID { get; set; }
public string EnquiryNo { get; set; }
public string EType { get; set; }
public string EnqCat { get; set; }
public string ContactPerson { get; set; }
public string ContactNumber { get; set; }
public string ContactEmail { get; set; }
public string Company { get; set; }
public string Description { get; set; }
public string AssignedTo { get; set; }
public DateTime AddressBy { get; set; }
public DateTime EnquiryDate { get; set; }
public string EStatus { get; set; }
public string QuotedOn { get; set; }
public string QuotedBy { get; set; }
public string QuoteNum { get; set; }
public string ClosedOn { get; set; }
public string ClosedBy { get; set; }
public string Reason { get; set; }
}
Meine Frage ist 2-fach 1. Gibt es eine bessere Art und Weise Tabellen miteinander zu verbinden, in Linq als ich oben mache? 2. Was könnte den Fehler verursachen, habe ich nichts dagegen, es herauszufinden, aber nicht sicher, wie man das sogar angehen.
EDIT: Dies ist definitiv kein Duplikat der genannten Frage. Die einzige Ähnlichkeit zwischen den 2 ist die Verwendung von Shortdatestring, jedoch ist die Fehlermeldung, die ich erhalte, völlig anders als die der anderen Frage.
kann Ihnen sagen, was ist das Problem, wenn Sie einfach so tun 'wählen a' anstelle der benutzerdefinierten Klasse mapper.tell uns? – Sampath
Wenn Sie a auswählen, werden die Datensätze ohne Ausnahmen übernommen. Ich vermute also, dass es eine Konvertierung ist, mit der es nicht zufrieden ist. – ThatChris
context.Database.Log = (sw) => Debug.WriteLine (sw); Sie können diese Zeile vor der Deklaration Ihrer Abfrage einfügen. und check in Ausgabefenster in VS für übersetzte Abfrage und Ausnahme. Wo Kontext ist Ihr DbContext Name – Raghu