2016-05-24 1 views
0

Я хочу использовать Entity Framework, чтобы объединить две таблицы и получить выход Этот результатКак соединить две таблицы и получить количество записей из записей с Entity Framework

table 1       table2 

idst  name     idtable2  idst   
-----------------    --------------------- 
1   ali      1    1 
2   reza      2    1 
3   amir      3    2 
4   obama      4    2 

Желаемый результат запроса:

row  name  count 
------------------------- 
1   ali   2 
2  reza   2 
3   amir  0 

I написал этот код:

var query = _Colorproductt.OrderBy(x => x.Productid) 
          .Skip((page - 1) * count) 
          .Take(count) 
          .Select(a => new Colormodel 
             { 
             Id = a.Id, 
             Countcolorsixe = Convert.ToInt16(_sizeproductt.Where(x => x.Id == a.Id).Count().ToString()), 
             Productid = a.Productid, 
             PrincipleImagePath = a.PrincipleImagePath 
             }); 

или

var q = _Colorproductt.Join(_sizeproductt, 
          c => c.Id, p => p.color_id, 
          (c, p) => new { ID_ProductId = c.Productid, PrincipleImagePath = c.PrincipleImagePath, Id = c.Id, Product = p }) 
         .ToList(); 
+0

вы должны были размещены соответствующие схемы базы данных и попытался код запроса для создания его более читаемым! –

ответ

0

Я пробую это в LinqPad, и он извлекает нужные данные. Я не думаю, что это хороший ответ, надеюсь, что кто-то сможет это улучшить.

void Main() 
{ 
    var table1 = new List<class1>(){ 
     new class1{ idst=1 , name="ali" }, 
     new class1{ idst=2, name="reza" }, 
     new class1{ idst=3 , name="amir" }, 
     new class1{ idst=4 , name="obama" }, 
    }; 

    var table2 = new List<class2>(){ 
     new class2{ idtable2=1, idst=1 }, 
     new class2{ idtable2=2, idst=1 }, 
     new class2{ idtable2=3, idst=2 }, 
     new class2{ idtable2=4, idst=2 }, 
    }; 

    var query = from t1 in table1 
       join t2 in table2.GroupBy(x=>x.idst).Select(x=> new {idst = x.FirstOrDefault().idst, count = x.Count()}) 
       on t1.idst equals t2.idst into g   
       from t3 in g.DefaultIfEmpty() 
       select new { 
       t1.name, 
       count = g.Sum(x=>x.count) 
       }; 


       query.Dump(); 
} 

class class1{ 
    public int idst {get;set;} 
    public string name {get;set;} 
} 

class class2{ 
    public int idtable2 {get;set;} 
    public int idst {get;set;} 
} 
0

Учитывая ваши имена сущностей являются ColorProduct и SizeProduct

var query = from p in ColorProduct 
      let cc = (
       from s in SizeProduct 
       where p.Id == s.ProductId 
       select s 
       ).Count() 
      select new {row = p.Id, name = p.Name, count = cc}; 
Смежные вопросы