在LINQ sql查询实体框架中选择每个连接表中的特定字段

时间:2017-07-03 10:14:20

标签: c# sql sql-server entity-framework linq

 public class OnLoginData
 {
     public List<TableDetails> lstTableDetails { get; set; }
     public List<CategoryDetails> lstCategoryDetails { get; set; }       
 }

 public class TableDetails
 {
     public int TableId { get; set; }
     public int TableNumber { get; set; }
     public string TableName { get; set; }
 }

 public partial class CategoryDetails
 {
     public int CategoryId { get; set; }
     public string CategoryName { get; set; }
     public string Description { get; set; }
     public string Image { get; set; }
     public long? SystemId { get; set; }
     public int? SortId { get; set; }
 }

 var queryLoginAdimin = from admin in conDb.SystemAdminMasters
                        join system in conDb.SystemMasters on admin.SystemID equals system.SystemId into SM
                        join category in conDb.MenuCategoryMasters on admin.SystemID equals category.SystemId into CM
                        join menu in conDb.MenuMasters on admin.SystemID equals menu.SystemId into MM
                        join table in conDb.TableMasters on admin.SystemID equals table.SystemId into TM
                        select new OnLoginData
                        {
                            lstTableDetails = TM.Select(o => new 
                            {
                                o.TableId,
                                o.TableName,
                                o.TableNumber 
                            }).ToList()
                        };

请检查上面的代码,我尝试使用多个表进行连接,并且我不需要数据库表中的所有字段。我只需要那些我已经单独上课TableDetailsCategoryDetails的字段。我想从linq查询上面选择那些字段,并创建一个On LoginData上的整个List。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

您可以通过以下方式查询

var queryLoginAdimin =
   from admin in conDb.SystemAdminMasters
   join system in conDb.SystemMasters on admin.SystemID equals system.SystemId into SM
   join category in conDb.MenuCategoryMasters on admin.SystemID equals category.SystemId into CM
   join menu in conDb.MenuMasters on admin.SystemID equals menu.SystemId into MM
   select new OnLoginData
   {
       lstTableDetails = conDb.TableMasters
                              .Where(table => table.SystemId == admin.SystemID)
                              .Select(o => new TableDetails
                               {
                                   TableId = o.TableId,
                                   TableName = o.TableName,
                                   TableNumber = o.TableNumber
                               }),
       //Same for lstCategoryDetails
    };

你不能在select里面使用.ToList()这样就可以将OnLoginData更改为IEnumerable

    public class OnLoginData
    {
        public IEnumerable<TableDetails> lstTableDetails { get; set; }
        public IEnumerable<CategoryDetails> lstCategoryDetails { get; set; }    
    }