当前位置: 首页 > 编程语言 > C#

LINQ,从多个表中选择以共享

时间:2023-04-10 22:09:01 C#

LINQ。从多个表中选择在项目中我有这个表:产品(id、catalogId、manufacturerId...)目录制造商和产品模型(id、名称、catalogId、catalogTitle、manufacturerId、manufacturerName)。如果我想获取Product项目,如何在Linq中编写此SQL查询?SELECTProduct.Name,Product.CatalogId,Product.ManufacturerId,[Catalog].Name,Manufacturer.NameFROMProduct,[Catalog],ManufacturerWHERE[Catalog].Id=Product.CatalogIdANDManufacturer.id=Product.ManufacturerIdAND产品.Active=1首先,我会回答你的问题..然后解决你的评论答案。要回答您的问题,请在Linq中执行此操作:frompinProductjoincinCatalogonc.Idequalsp.CatalogIdjoinminManufactureronm.Idequalsp.ManufacturerIdwherep.Active==1selectnew{Name=p.Name,CatalogId=p.CatalogId,ManufacturerId=p.ManufacturerId,CatalogName=c.Name,ManufacturerName=m.Name};这将为您提供一个匿名对象,其中包含您请求的项目。如果您需要在其他地方使用它(并且您没有使用动态对象),我建议您创建一个视图模型并在您的选择中实例化其中一个。示例:publicclassProductInfoView{publicstringName{get;放;}publicintCatalogId{得到;放;}publicintManufacturerId{得到;放;}publicstringCatalogName{get;放;}publicstringManufacturerName{get;放;从产品中的p在c.Id上加入目录中的c.Id等于p.CatalogId在制造商中加入m.Id等于p.ManufacturerIdwherep.Active==1selectnewProductInfoView(){Name=p.Name,CatalogId=p.CatalogId,ManufacturerId=p.ManufacturerId,CatalogName=c.Name,ManufacturerName=m.Name};这将使引用您的查询结果变得不那么痛苦。要回答您的评论,如果您想要的只是产品,那么您正在做很多连接。您的标准只能确保三件事您的产品有一个活动标志1您的产品有一个现有的目录条目您的产品有一个现有的制造商条目如果#2和#3是多余的并且您不一定需要这些名称,您可以简单地做:frompinProductwherep.Active==1selectp如果Product是一个CRUD模型,你可以深度加载它以包含制造商/目录信息,或者使用上面的视图模型。祝你好运!合并多个表的结果,无需显式连接:以上是C#学习教程:LINQ。从多个表中选择要共享的所有内容。如果对你有用,需要了解更多C#学习教程,希望大家多多关注——frompinProductfromcinCatalogfromminManufacturerwherec.Id==p.CatalogId&&m.Id==p.ManufacturerId&&p.Active==1selectnew{p.Name,p.CatalogId,p.ManufacturerId,c.Name,m.Name};如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: