2016-02-26 40 views
1

我写了连接3个表的linq查询。我想以列表的形式返回数据。但根据我的知识列表将不会携带属于其他表的数据。 这是我的查询。当使用不同的表与内部连接时,无法返回linq查询中的列表

public List<ts_upld_doc> GetDetails(int client_id, int emp_id, int empcitizen_id) 
{ 
    var truecondn = 
    (from c in db.ts_upld_doc 
    where (((c.upld_clientid == client_id && c.upld_employeeid == emp_id 
       && empcitizen_id == 0) 
      || (c.upld_clientid == client_id && c.upld_empcitizenid == empcitizen_id 
       && emp_id == 0)) 
      || (client_id == 0 && emp_id == 0 && c.upld_empcitizenid == empcitizen_id)) 
      && c.upld_doc_delstatus == 0 select c).ToList(); 

    if(truecondn.Count>0) 
    { 
     var data = 
     (from up in db.ts_upld_doc 
     join doc in db.tm_doc_type on up.upld_docid equals doc.doc_typeid 
     join content in db.tr_upld_content on up.upld_docid equals content.upld_docid 
     where content.upld_contentlabel == "Expiry Date" 
     select new 
     { 
      doc.doctype_name, 
      doc.doc_typeid, 
      content.upld_contentvalue 
     }).ToList();     
    } 
    return truecondn;    
} 

列表将携带的数据属于该表。但我的查询var数据包含来自多个表的数据。那么将数据传输到控制器的最佳方式是什么?我在DAL中编写了这个查询。哪种返回类型我应该在这里使用?我想以列表形式的数据,因为在控制器我绑定这个数据模型。但这可能是不可能的。我是否需要创建可以以列表<>的形式传输多个表格的数据的视图模型>。请建议。

这是我的视图模型和pococlasses

public class MyViewModel 
    { 

     public ts_upld_doc upload_document { get; set; } 
     public IList<ts_upld_doc> Upload_List { get; set; } 


    } 
    public class PocoClasses 
    { 
     public virtual int upld_docid { get; set; } 
     public virtual string upld_contentlabel { get; set; } 
     public virtual string upld_contentvalue { get; set; } 
    } 

这是我的查询。

public List<PocoClasses> GetDetails(int client_id, int emp_id, int empcitizen_id) 
     { 

       var result = (from up in db.ts_upld_doc 
           join doc in db.tm_doc_type on up.upld_docid equals doc.doc_typeid 
           join content in db.tr_upld_content on up.upld_docid equals content.upld_docid 
           select new PocoClasses 
            { 
             upld_docid = content.upld_docid, 
             upld_contentlabel=content.upld_contentlabel, 
             upld_contentvalue=content.upld_contentvalue 


            }); 

      return result.ToList(); 
     } 
     This is how i am trying to bind data to model. 


List<PocoClasses> ts = docdel.GetDetails(client_id, emp_id, empcitizen_id); 
    model.Upload_List = ts; 
+0

用[数据传输对象(http://www.asp.net/web-api/overview/data/using-web-api-with-entity-framework/part-5) –

回答

0

您需要创建一些DTO/POCO类,以将数据从数据访问层“传输”到您的业务层。

因此,定义一个简单的旧类对象MyDto具有简单的属性get; set字段。 将这些类放在某个地方,您可以使用Dal和Business层代码共享它们。

public List<MyDto> GetDetails(.... 
{ 
    var result = (from c in ctx.Table1 
        join p in ctx.Table2 on c.ClientId equals p.ClientId 
        select new MyDto 
        { 
        ClientId = c.ClientId, 
        Field2 = p.SomeField 
        } 

    return result.ToList(); 
} 
+0

好。所以在MyDto类中,我应该声明字段或其他类? – Niranjan

+0

先生您可以举个小例子来创建poco课程吗?困惑于在poco类中声明什么? – Niranjan

+0

我上面尝试过,但我无法将列表绑定到模型。我尝试过这样的事情。我将发布上面的代码。 – Niranjan