Warum kann ich nicht mit einem Wörterbuch mit Entity Framework
Dictionary<int, string> D = new Dictionary<int, string>();
D.Add(0, "Insert");
D.Add(1, "Update");
D.Add(2, "Delete");
using (SerasMacEntity SME = new SerasMacEntity())
{
var SQL = (from p in SME.tbl_admin_islem
let testx = D.Where(x => x.Key == p.islem).Select(x => x.Value).FirstOrDefault()
orderby p.tarih descending
select new
{
p.id,
p.islem,
p.tarih
});
Store1.DataSource = SQL;
Store1.DataBind();
}
Seine Angabe dieser Fehler;
'- System.Sammlungen.Generisches.KeyValuePair`2' und Nur primitive Typen
('wie Int32, String und Guid')
Ich verwenden Sie diese Methode, Linq, aber ich kann nicht mit Entitäten.
public class table
{
public int ID { get; set; }
public string Adi { get; set; }
public int IslemID { get; set; }
public table() { }
public table(int _ID, string _Adi, int _IslemID)
{
_ID = ID;
_Adi = Adi;
_IslemID = IslemID;
}
}
public List<table> table_list = new List<table>(new table[]
{
new table{ID=1,Adi="A1",IslemID=0},
new table{ID=2,Adi="A2",IslemID=1},
new table{ID=3,Adi="A3",IslemID=2},
new table{ID=4,Adi="A4",IslemID=1},
new table{ID=5,Adi="A5",IslemID=0},
new table{ID=6,Adi="A6",IslemID=2},
new table{ID=7,Adi="A7",IslemID=0},
new table{ID=8,Adi="A8",IslemID=1},
new table{ID=9,Adi="A9",IslemID=3}
});
public Dictionary<int, string> option_dictionary = new Dictionary<int,string>()
{
{0, "OK"},
{1, "NO"},
{2, "YA"},
{3, "OH"}
};
public void TestL()
{
string b = option_dictionary.Where(x => x.Key == 1).Select(x =>x.Value).First();
var SQL = (from p in table_list
let test = option_dictionary.Where(x => x.Key == p.IslemID).Select(x => x.Value).First()
select new
{
p.ID,
p.Adi,
test
}
);
}
Diese Methode funktioniert in Linq. Seine nicht funktioniert in Person.
Vielen Dank für Ihre Hilfe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
LINQ ist nicht das gleiche wie LINQ. Ihre arbeiten Beispiel wird eine Datenstruktur im Speicher, nämlich
List<table> table_list
oder generellIEnumerable<T>
. Mithilfe der LINQ-extension-Methoden derIEnumerable<T>
heißt LINQ to Objects.Wenn Sie LINQ, um einen
ObjectSet<T>
oderDbSet<T>
von Entity Framework-Sie sind mit der LINQ-extension-Methoden derIQueryable<T>
. In diesem Fall verwenden Sie LINQ to Entities. Sie haben den gleichen Namen, und Sie können das gleiche schreiben LINQ-Ausdrücke, wie Sie mit LINQ to Objects und Ihr code wird kompiliert in Ordnung.Aber der große Unterschied ist, dass eine LINQ to Entities-Abfrage wird nicht ausgeführt, die in Speicher (wie LINQ to Objects), aber es muss übersetzt werden in SQL in der Datenbank ausgeführt werden.
Wenn Ihre Abfrage ist nicht übersetzbar in die SQL-oder die übersetzung ist nicht unterstützt, erhalten Sie eine Laufzeit-exception. In Ihrem speziellen Fall haben Sie eine komplexe in-memory-Daten-Struktur - Ihr Wörterbuch kann nicht verwendet werden in einer SQL-Abfrage.
Müssen Sie die Abfrage so umgeschrieben werden, das problem zu lösen. Ich würde das Wörterbuch zu verwenden, nachdem die Abfrage ausgeführt worden ist, zum Beispiel auf diese Weise:
Ich es lösen dieser Methode;
oder versuchen, diese
War ich konvertieren meiner Person AsEnumerable() und dann gelten wieder die Lambda-Abfrage.