Я хочу преобразовать этот SQL-запрос в LINQ в Entities в моем первом проекте Silverlight, но я не знаю, как, я никогда не работал с Linq:
select *
from Tipo t,
Unidad u
where t.Clave = @Clave
and t.Equipo = u.Equipo
and u.IDUni in
(select IDUni
from Orden o
where o.IDUni = u.IDUni
and o.Clave = t.Clave)
кто-нибудь мне поможет
Я пробую это, и оба работают нормально:
ObjectSet<Orden> ordenes = this.ObjectContext.Orden;
ObjectSet<Unidad> unidades = this.ObjectContext.Unidad;
ObjectSet<Tipo> tipos = this.ObjectContext.Tipo;
var query = from t in tipos
from u in unidades
where t.Clave == _clave
where t.Equipo == u.Equipo
where (from o in ordenes
where o.IDUni == u.IDUni
where o.Clave == t.Clave
select o.IDUni).Contains(u.IDUni)
select new { t, u };
а также
var query = from t in tipos
from u in unidades
from o in ordenes
where t.Clave == _clave
where t.Equipo == u.Equipo
where o.IDUni == u.IDUni
where o.Clave == t.Clave
select t;
большое спасибо
McGarnagle и
Aducci
Вот перевод вашего SQL-запроса. Есть ли конкретные столбцы, которые вы хотите? Было бы необычно select *
var query = from t in context.Tipo
from u in context.Unidad
where t.Clave == clave
where t.Equipo == u.Equipo
where (from o in context.Orden
where o.IDUni == u.IDUni
where o.Clave == t.Clave
select o.IDUni).Contains(u.IDUni)
select new { t, u };
Это " Join
а затем " Where
. Попробуйте что-то вроде этого:
public void DoStuff(IEnumerable<Tipo> t, IEnumerable<Unidad> u, IEnumerable<Orden> o)
{
string clave = "something";
var items = t
.Join(u, // join to collection "u"
trow => trow.Equipo, // "t" selector
urow => urow.Equipo, // "u" join selector
(trow, urow) => new { trow = trow, urow = urow }) // result selector
.Where(item => item.trow.Clave == clave
&& o.Where(orow => orow.IDUni == item.urow.IDUni
&& orow.Clave == item.trow.Clave)
.Select(orow => orow.IDUni)
.Contains(item.urow.IDUni)
);
}