这篇文章主要介绍了asp.net实现的MVC跨数据库多表联合动态条件查询功能,结合实例形式较为详细分析了asp.net基于MVC架构的跨数据库多表联合查询功能实现技巧,需要的朋友可以参考下
本文实例讲述了asp.net实现的MVC跨数据库多表联合动态条件查询功能。分享给大家供大家参考,具体如下:
一、控制器中方法
[HttpGet] public ActionResult Search() { ViewBag.HeadTitle = "搜索"; ViewBag.MetaKey = "\"123\""; ViewBag.MetaDes = "\"456\""; string whereText = ""; if (Security.HtmlHelper.GetQueryString("first", true) != string.Empty) { whereText += " and a.ParentId='" + StringFilter("first", true)+"'"; } if (Security.HtmlHelper.GetQueryString("second", true) != string.Empty) whereText += " and a.categoryId='" + StringFilter("second",true)+"'"; string valueStr = ""; if (Security.HtmlHelper.GetQueryString("theme", true) != string.Empty) valueStr += StringFilter("theme", true) + ","; if (Security.HtmlHelper.GetQueryString("size", true) != string.Empty) valueStr += StringFilter("size", true) + ","; if (Security.HtmlHelper.GetQueryString("font", true) != string.Empty) valueStr += StringFilter("font", true) + ","; if (Security.HtmlHelper.GetQueryString("shape", true) != string.Empty) valueStr += StringFilter("shape", true) + ","; if (Security.HtmlHelper.GetQueryString("technique", true) != string.Empty) valueStr += StringFilter("technique", true) + ","; if (Security.HtmlHelper.GetQueryString("category", true) != string.Empty) valueStr += StringFilter("category", true) + ","; if (Security.HtmlHelper.GetQueryString("place", true) != string.Empty) valueStr += StringFilter("place", true) + ","; if (Security.HtmlHelper.GetQueryString("price", true) != string.Empty) valueStr += StringFilter("price", true) + ","; if (valueStr != "") { valueStr=valueStr.Substring(0, valueStr.Length - 1); whereText += " and f.valueId in("+valueStr+")"; } if (Security.HtmlHelper.GetQueryString("searchKeys", true) != string.Empty) whereText += " and a.SaleTitle like '%'" + StringFilter("searchKes", true) + "'%' or a.SaleDes like '%'" + StringFilter("searchKes", true) + "'%' or a.SaleAuthor like '%'" + StringFilter("searchKes", true) + "'%' or a.KeyWords like '%'" + StringFilter("searchKes", true) + "'%' or g.valueProperty like '%'" + StringFilter("searchKes", true) + "'%'"; int pageSize = 50; int pageIndex = HttpContext.Request.QueryString["pageIndex"].Toint(1); List<string> searchInfo = Search(pageIndex, pageSize, whereText, 1); if (Security.HtmlHelper.GetQueryString("sort", true) != string.Empty) { string sort = StringFilter("sort", true); switch (sort) { case "1": //综合即默认按照上架时间降序排列即按照id降序 searchInfo = Search(pageIndex, pageSize, whereText, 1); break; case"2": //销量 searchInfo = Search(pageIndex, pageSize, whereText,0, "saleTotal"); break; case "3": //收藏 searchInfo = Search(pageIndex, pageSize, whereText,0, "favoritesTotal"); break; case "4": //价格升序 searchInfo = Search(pageIndex, pageSize, whereText,1); break; case "5": //价格降序 searchInfo = Search(pageIndex, pageSize, whereText,2); break; } } string jsonStr = searchInfo[0]; ViewData["jsondata"] = jsonStr; int allCount = Utility.Toint(searchInfo[1], 0); ViewBag.AllCount = allCount; ViewBag.MaxPages = allCount % pageSize == 0 ? allCount / pageSize : (allCount / pageSize + 1).Toint(1); return View(); } [NonAction] public List<string> Search(int pageIndex, int pageSize, string whereText, int orderByPrice, string orderBy = "SaleId") { BLL.Products searchInfoBLL = new BLL.Products(); List<string> searchInfo = searchInfoBLL.GetSearchInfo(pageIndex, pageSize, whereText, orderByPrice,orderBy); return searchInfo; }
注:Security.HtmlHelper.GetQueryString(),StringFilter()为自己封装的方法,用于过滤参数值
二、BLL层方法
using System; using System.Web; using System.Web.Caching; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Data.Common; using System.Web.Script.Serialization; using FotosayMall.Model; using FotosayMall.Common; using System.Text.RegularExpressions; using System.IO; using Newtonsoft.Json; using Newtonsoft.Json.Converters; using FotosayMall.MVC.Models; namespace FotosayMall.BLL { public class Products { private readonly DAL.Products dal = new DAL.Products(); /// <summary> /// 分页查询,检索页数据 /// </summary> /// <param name="pageIndex"></param> /// <param name="pageSize"></param> /// <param name="orderByPrice">价格排序:0默认,1升序,2降序</param> /// <returns></returns> public List<string> GetSearchInfo(int pageIndex, int pageSize, string whereText, int orderByPrice, string orderBy = "SaleId") { DataSet searchInfoTables = dal.GetSearchInfo(pageIndex, pageSize, whereText); //总记录数 int allCount = Utility.Toint(searchInfoTables.Tables[1].Rows[0]["rowsTotal"], 0); var searchInfo = from list in searchInfoTables.Tables[0].AsEnumerable().OrderByDescending(x => x.Table.Columns[orderBy]) select new SearchModel { Url = "/home/products?saleId=" + list.Field<int>("SaleId"), Author = list.Field<string>("SaleAuthor"), PhotoFileName = list.Field<string>("PhotoFileName"), PhotoFilePathFlag = list.Field<int>("PhotoFilePathFlag"), Province = list.Field<string>("Place").Split(' ').First(), SalePrice = list.Field<decimal>("SalePrice"), UsingPrice = list.Field<decimal>("usingPrice"), Title = list.Field<string>("SaleTitle").Length > 30 ? list.Field<string>("SaleTitle").Substring(0, 30) : list.Field<string>("SaleTitle"), Year = list.Field<DateTime>("BuildTime").ToString("yyyy") == "1900" ? "" : list.Field<DateTime>("BuildTime").ToString("yyyy年") }; if (orderByPrice==2) searchInfo = searchInfo.OrderByDescending(x => x.Price); else if (orderByPrice == 1) searchInfo = searchInfo.OrderBy(x => x.Price); string jsonStr = JsonConvert.SerializeObject(searchInfo); List<string> dataList = new List<string>(); dataList.Add(jsonStr); dataList.Add(allCount.ToString()); return dataList; } } }
注:注意观察由DataTable转换为可枚举的可用于Linq查询的方法方式。
DAL
/// <summary> /// 获取检索页数据 /// </summary> /// <param name="pageIndex"></param> /// <param name="pageSize"></param> /// <returns></returns> public DataSet GetSearchInfo(int pageIndex, int pageSize, string whereText) { StringBuilder sqlText = new StringBuilder(); sqlText.Append("select * from ("); sqlText.Append("select a.SaleId,a.PhotoId,SaleTitle,SaleAuthor,a.Status,a.categoryId,c.UserID,c.UserName,b.PhotoFilePathFlag,b.PhotoFileName,coalesce(e.BuildTime,0) BuildTime,c.Place,coalesce(d.usingPrice,0) usingPrice,coalesce(e.SalePrice,0) SalePrice,h.saleTotal,h.favoritesTotal,row_number() over(order by a.saleId) rowsNum "); sqlText.Append("from fotosay..Photo_Sale a join fotosay..Photo_Basic b on a.PhotoId = b.PhotoID "); sqlText.Append("join fotosay..System_AccountsDescription c on b.UserID = c.UserID "); sqlText.Append("left join fotosay..Photo_Sale_Picture d on a.SaleId = d.SaleId "); sqlText.Append("left join fotosay..Photo_Sale_Tangible e on a.saleId = e.saleId "); sqlText.Append("join FotosayMall..Fotomall_Product_Relation f on f.saleId = a.SaleId "); sqlText.Append("join FotosayMall..Fotomall_Product_PropertyValue g on g.categoryId = a.categoryId and g.valueId = f.valueId and g.propertyId = f.propertyId "); sqlText.Append("join fotosay..Photo_Sale_Property h on a.saleId = h.saleId "); sqlText.Append("where a.Status=1 " + whereText + " "); sqlText.Append("group by a.SaleId,a.PhotoId,SaleTitle,SaleAuthor,a.Status,a.categoryId,c.UserID,c.UserName,b.PhotoFilePathFlag,b.PhotoFileName,e.BuildTime,c.Place,usingPrice,SalePrice,h.saleTotal,h.favoritesTotal "); sqlText.Append(") t where rowsNum between @PageSize*(@PageIndex-1)+1 and @PageSize*@PageIndex;"); sqlText.Append("select count(distinct a.saleId) rowsTotal from fotosay..Photo_Sale a join (select b1.PhotoFilePathFlag,b1.PhotoFileName,b1.UserID,b1.PhotoID from fotosay..Photo_Basic b1 union select b2.PhotoFilePathFlag,b2.PhotoFileName,b2.UserID,b2.PhotoID from fotosay..Photo_Basic_History b2 ) b on a.PhotoId = b.PhotoID join fotosay..System_AccountsDescription c on b.UserID = c.UserID left join fotosay..Photo_Sale_Picture d on a.SaleId = d.SaleId left join fotosay..Photo_Sale_Tangible e on a.saleId = e.saleId join FotosayMall..Fotomall_Product_Relation f on f.saleId = a.SaleId join FotosayMall..Fotomall_Product_PropertyValue g on g.categoryId = a.categoryId and g.valueId = f.valueId and g.propertyId = f.propertyId join fotosay..Photo_Sale_Property h on a.saleId = h.saleId where a.Status=1 " + whereText + ";"); DbParameter[] parameters = { Fotosay.CreateInDbParameter("@PageIndex", DbType.Int32,pageIndex), Fotosay.CreateInDbParameter("@PageSize", DbType.Int32,pageSize) }; DataSet searchInfoList = Fotosay.ExecuteQuery(CommandType.Text, sqlText.ToString(), parameters); //记录条数不够一整页,则查历史库 if (searchInfoList.Tables[0].Rows.Count < pageSize) { string sql = "select top(1) a.saleId from fotosay..Photo_Sale a join fotosay..Photo_Basic_History b on a.PhotoId = b.PhotoID join fotosay..System_AccountsDescription c on b.UserID = c.UserID left join fotosay..Photo_Sale_Picture d on a.SaleId = d.SaleId left join fotosay..Photo_Sale_Tangible e on a.saleId = e.saleId join FotosayMall..Fotomall_Product_Relation f on f.saleId = a.SaleId join FotosayMall..Fotomall_Product_PropertyValue g on g.categoryId = a.categoryId and g.valueId = f.valueId and g.propertyId = f.propertyId join fotosay..Photo_Sale_Property h on a.saleId = h.saleId where a.Status=1 " + whereText + ";"; DataSet ds = Fotosay.ExecuteQuery(CommandType.Text, sql.ToString(), parameters); if (ds != null && ds.Tables[0].Rows.Count > 0) { StringBuilder sqlTextMore = new StringBuilder(); sqlTextMore.Append("select * from ("); sqlTextMore.Append("select a.SaleId,a.PhotoId,SaleTitle,SaleAuthor,a.Status,a.categoryId,c.UserID,c.UserName,b.PhotoFilePathFlag,b.PhotoFileName,coalesce(e.BuildTime,0) BuildTime,c.Place,coalesce(d.usingPrice,0) usingPrice,coalesce(e.SalePrice,0) SalePrice,h.saleTotal,h.favoritesTotal,row_number() over(order by a.saleId) rowsNum "); sqlTextMore.Append("from fotosay..Photo_Sale a "); sqlTextMore.Append("join (select b1.PhotoFilePathFlag,b1.PhotoFileName,b1.UserID,b1.PhotoID from fotosay..Photo_Basic b1 union select b2.PhotoFilePathFlag,b2.PhotoFileName,b2.UserID,b2.PhotoID from fotosay..Photo_Basic_History b2 ) b on a.PhotoId = b.PhotoID join fotosay..System_AccountsDescription c on b.UserID = c.UserID "); sqlTextMore.Append("left join fotosay..Photo_Sale_Picture d on a.SaleId = d.SaleId "); sqlTextMore.Append("left join fotosay..Photo_Sale_Tangible e on a.saleId = e.saleId "); sqlTextMore.Append("join FotosayMall..Fotomall_Product_Relation f on f.saleId = a.SaleId "); sqlTextMore.Append("join FotosayMall..Fotomall_Product_PropertyValue g on g.categoryId = a.categoryId and g.valueId = f.valueId and g.propertyId = f.propertyId "); sqlTextMore.Append("join fotosay..Photo_Sale_Property h on a.saleId = h.saleId "); sqlTextMore.Append("where a.Status=1 " + whereText + " "); sqlTextMore.Append("group by a.SaleId,a.PhotoId,SaleTitle,SaleAuthor,a.Status,a.categoryId,c.UserID,c.UserName,b.PhotoFilePathFlag,b.PhotoFileName,e.BuildTime,c.Place,usingPrice,SalePrice,h.saleTotal,h.favoritesTotal"); sqlTextMore.Append(") t where rowsNum between @PageSize*(@PageIndex-1)+1 and @PageSize*@PageIndex;"); sqlTextMore.Append("select count(distinct a.saleId) rowsTotal from fotosay..Photo_Sale a join (select b1.PhotoFilePathFlag,b1.PhotoFileName,b1.UserID,b1.PhotoID from fotosay..Photo_Basic b1 union select b2.PhotoFilePathFlag,b2.PhotoFileName,b2.UserID,b2.PhotoID from fotosay..Photo_Basic_History b2 ) b on a.PhotoId = b.PhotoID join fotosay..System_AccountsDescription c on b.UserID = c.UserID left join fotosay..Photo_Sale_Picture d on a.SaleId = d.SaleId left join fotosay..Photo_Sale_Tangible e on a.saleId = e.saleId join FotosayMall..Fotomall_Product_Relation f on f.saleId = a.SaleId join FotosayMall..Fotomall_Product_PropertyValue g on g.categoryId = a.categoryId and g.valueId = f.valueId and g.propertyId = f.propertyId join fotosay..Photo_Sale_Property h on a.saleId = h.saleId where a.Status=1 " + whereText + ";"); searchInfoList = Fotosay.ExecuteQuery(CommandType.Text, sqlTextMore.ToString(), parameters); } } return searchInfoList; }
注:注意其中使用的跨数据库查询的方式和union的一种使用方式
Model
using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Web; namespace FotosayMall.MVC.Models { public class SearchModel { /// <summary> /// 原始图片文件夹(用于url地址) /// </summary> private const string OriginImagesUrlFolder = "userimages/photos_origin"; /// <summary> /// 购买页链接 /// </summary> public string Url { get; set; } /// <summary> /// 所属域名(1为fotosay,2为img,3为img1) /// </summary> public int PhotoFilePathFlag { get; set; } /// <summary> /// 图片名称 /// </summary> public string PhotoFileName { get; set; } /// <summary> /// 商品名称 /// </summary> public string Title { get; set; } /// <summary> /// 作者所在省份 /// </summary> public string Province { get; set; } /// <summary> /// 作者 /// </summary> public string Author { get; set; } /// <summary> /// 创作年份 /// </summary> public string Year { get; set; } /// <summary> /// 图片:单次价格 /// </summary> public decimal UsingPrice { get; set; } /// <summary> /// 实物:定价 /// </summary> public decimal SalePrice { get; set; } /// <summary> /// 售价 /// </summary> public string Price { get { if (this.UsingPrice > 0) return this.UsingPrice.ToString(); else if (this.SalePrice > 0) return this.SalePrice.ToString(); else return "议价"; } } /// <summary> /// /// </summary> private string MasterSite { get { return ConfigurationManager.AppSettings["masterSite"].ToString(); } } /// <summary> /// 图片完整路径 /// </summary> public string Img { get { return MasterSite + "/" + OriginImagesUrlFolder + this.PhotoFileName + "b.jpg"; } } } }
以上是asp.net跨数据库多表联合动态条件查询的代码示例的详细内容。更多信息请关注PHP中文网其他相关文章!

引言在当今快速发展的数字世界中,构建健壮、灵活且可维护的WEB应用程序至关重要。PHPmvc架构提供了实现这一目标的理想解决方案。MVC(模型-视图-控制器)是一种广泛使用的设计模式,可以将应用程序的各个方面分离为独立的组件。MVC架构的基础MVC架构的核心原理是分离关注点:模型:封装应用程序的数据和业务逻辑。视图:负责呈现数据并处理用户交互。控制器:协调模型和视图之间的交互,管理用户请求和业务逻辑。PHPMVC架构phpMVC架构遵循传统MVC模式,但也引入了语言特定的功能。以下是PHPMVC

mvc架构(模型-视图-控制器)是PHP开发中最流行的模式之一,因为它为组织代码和简化WEB应用程序的开发提供了清晰的结构。虽然基本的MVC原理对于大多数Web应用程序来说已经足够,但对于需要处理复杂数据或实现高级功能的应用程序,它存在一些限制。分离模型层分离模型层是高级MVC架构中常见的一种技术。它涉及将模型类分解为更小的子类,每个子类专注于特定功能。例如,对于一个电子商务应用程序,您可以将主模型类分解为订单模型、产品模型和客户模型。这种分离有助于提高代码的可维护性和可重用性。使用依赖注入依赖

MVC(Model-View-Controller)模式是一种常用的软件设计模式,可以帮助开发人员更好地组织和管理代码。MVC模式将应用程序分为三部分:模型(Model)、视图(View)和控制器(Controller),每个部分都有自己的角色和职责。在本文中,我们将讨论如何使用PHP实现MVC模式。模型(Model)模型代表应用程序的数据和数据处理。通常,

SpringMVC框架解密:为什么它如此受欢迎,需要具体代码示例引言:在当今的软件开发领域中,SpringMVC框架已经成为开发者非常喜爱的一种选择。它是基于MVC架构模式的Web框架,提供了灵活、轻量级、高效的开发方式。本文将深入探讨SpringMVC框架的魅力所在,并通过具体的代码示例来展示其强大之处。一、SpringMVC框架的优势灵活的配置方式Spr

在Web开发中,MVC(Model-View-Controller)是一种常用的架构模式,用于处理和管理应用程序的数据、用户界面和控制逻辑。PHP作为流行的Web开发语言,也可以借助MVC架构来设计和构建Web应用程序。本文将介绍如何在PHP中使用MVC架构设计项目,并解释其优点和注意事项。什么是MVCMVC是一种软件架构模式,通常用于Web应用程序中。MV

PHP8框架开发MVC:初学者需要知道的重要概念和技巧引言:随着互联网的快速发展,Web开发在当今的软件开发行业中扮演着重要的角色。PHP被广泛用于Web开发,并且有许多成熟的框架可以帮助开发人员更高效地构建应用程序。其中,MVC(Model-View-Controller)架构是最常见且广泛使用的模式之一。本文将介绍初学者在使用PHP8框架开发MVC应用程

PHP8框架开发MVC:逐步指南引言:MVC(Model-View-Controller)是一种常用的软件架构模式,用于将应用程序的逻辑、数据和用户界面分离。它提供了一种将应用程序分成三个不同组件的结构,以便更好地管理和维护代码。在本文中,我们将探讨如何使用PHP8框架来开发一个符合MVC模式的应用程序。第一步:理解MVC模式在开始开发MVC应用程序之前,我

Beego是一个基于Go语言的Web应用框架,具有高性能、简单易用和高可扩展性等优点。其中,MVC架构是Beego框架的核心设计理念之一,它可以帮助开发者更好地管理和组织代码,提高开发效率和代码质量。本文将深入探究Beego的MVC架构,让开发者更好地理解和使用Beego框架。一、MVC架构简介MVC,即Model-View-Controller,是一种常见


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Dreamweaver CS6
视觉化网页开发工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

记事本++7.3.1
好用且免费的代码编辑器

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中