简体   繁体   English

用于实体框架和 ASP.NET MVC 应用程序的自定义 Linq 查询

[英]Custom Linq query for Entity Framework & ASP.NET MVC app

I have been working on an ASP.NET MVC app using Entity Framework.我一直在使用实体框架开发 ASP.NET MVC 应用程序。 Also, it's my first time developing an ASP.NET MVC app.此外,这是我第一次开发 ASP.NET MVC 应用程序。 I have been struggling (close to a month of trying and googling) to write a linq query to display results in jQuery datatable for the below SQL query.我一直在努力(近一个月的尝试和谷歌搜索)编写 linq 查询以在 jQuery 数据表中显示以下 SQL 查询的结果。 It involves various left joins and some columns have null values.它涉及各种左连接,并且某些列具有 null 值。 It would be great if someone could help me out on this.如果有人可以帮助我解决这个问题,那就太好了。 There are 3 tables as below有3个表如下

  1. Assets资产
  2. Category类别
  3. Term学期
SELECT 
    Asset.Name AS Name,
    Asset.Type AS Type,
    Asset.Parent_Asset AS "Parent Asset",
    Cat.Category AS Category,
    Cat.Parent_Category AS "Parent Category",
    T.BUSINESS_TERM AS "Business Term",
    T.SHORT_DESCRIPTION AS Description
FROM 
    (SELECT 
         CH.DISPLAY AS Name,
         CH.TYPE AS Type,
         PA.DISPLAY AS Parent_Asset,
         CH.CATEGORY_INT_ID
     FROM 
         [Metadata].[dbo].[Asset] CH
     LEFT JOIN 
         [Metadata].[dbo].[Asset] PA ON PA.PARENT_ASSET_ID = CH.ASSET_INT_ID) Asset
     LEFT JOIN 
         (SELECT
              CH.DISPLAY AS Category,
              PA.DISPLAY AS Parent_Category,
              CH.CATEGORY_INT_ID AS Category_Id
          FROM 
              [METADATA].[dbo].[Category] CH
          LEFT JOIN 
              [METADATA].[dbo].[Category] PA ON PA.PARENT_CATEGORY_ID = CH.CATEGORY_INT_ID) Cat ON Asset.CATEGORY_INT_ID = Cat.Category_Id
     LEFT JOIN 
         [Metadata].[dbo].[Term] T ON T.CATEGORY_INT_ID = Cat.Category_Id

Create Stored Procedure in the database where the application is connected在应用程序连接的数据库中创建存储过程

CREATE PROCEDURE sp_GetAsset
AS
BEGIN

SELECT 
    Asset.Name AS Name,
    Asset.Type AS Type,
    Asset.Parent_Asset AS ParentAsset,
    Cat.Category AS Category,
    Cat.Parent_Category AS ParentCategory,
    T.BUSINESS_TERM AS BusinessTerm,
    T.SHORT_DESCRIPTION AS Description
FROM 
(
    SELECT 
        CH.DISPLAY AS Name,
        CH.TYPE AS Type,
        PA.DISPLAY AS Parent_Asset,
        CH.CATEGORY_INT_ID
    FROM 
        [Metadata].[dbo].[Asset] CH
    LEFT JOIN 
        [Metadata].[dbo].[Asset] PA ON PA.PARENT_ASSET_ID = CH.ASSET_INT_ID) Asset
    LEFT JOIN 
        (SELECT
             CH.DISPLAY AS Category,
             PA.DISPLAY AS Parent_Category,
             CH.CATEGORY_INT_ID AS Category_Id
         FROM 
             [METADATA].[dbo].[Category] CH
         LEFT JOIN 
             [METADATA].[dbo].[Category] PA ON PA.PARENT_CATEGORY_ID = CH.CATEGORY_INT_ID) Cat ON Asset.CATEGORY_INT_ID = Cat.Category_Id
    LEFT JOIN 
        [Metadata].[dbo].[Term] T ON T.CATEGORY_INT_ID = Cat.Category_Id
);  
END

Create class to get data:创建 class 获取数据:

public class TestAsset
{
        public string Name           { get; set; }
        public string Type           { get; set; }
        public string ParentAsset    { get; set; }
        public string Category       { get; set; }
        public string ParentCategory { get; set; }
        public string BusinessTerm   { get; set; }
        public string Description    { get; set; }
}

Get data in your Context在您的上下文中获取数据

 public class YourContext : DbContext
 {
    public List<TestAsset> GetAssets()
    {
        return this.Query<TestAsset>.FromSql("Exec sp_GetAsset").ToList();
    }
 }

Use GetAssets Method使用 GetAssets 方法

using (YourContext context = new YourContext())
{       
   var list = context.GetAssets();
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM