LINQ基本语法及其示例.docx

上传人:b****3 文档编号:5342706 上传时间:2022-12-15 格式:DOCX 页数:17 大小:19.78KB
下载 相关 举报
LINQ基本语法及其示例.docx_第1页
第1页 / 共17页
LINQ基本语法及其示例.docx_第2页
第2页 / 共17页
LINQ基本语法及其示例.docx_第3页
第3页 / 共17页
LINQ基本语法及其示例.docx_第4页
第4页 / 共17页
LINQ基本语法及其示例.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

LINQ基本语法及其示例.docx

《LINQ基本语法及其示例.docx》由会员分享,可在线阅读,更多相关《LINQ基本语法及其示例.docx(17页珍藏版)》请在冰豆网上搜索。

LINQ基本语法及其示例.docx

LINQ基本语法及其示例

LINQ基本语法及其示例  

说明:

1、在未作任何说明的情况下,以下用到的db变量都是DataContext的实例对象,声明语法类似如下:

using(BP_DataClassesDataContextdb=newBP_DataClassesDataContext(ConnectionStrings.GetInstance("ZJ").Con))

{

//Code

}

2、默认q为Iqueryable类型变量

 

 

简单查询:

varq=frompindb.view_PreTestResultAuditList

selectp;

简单条件查询:

方式一:

直接使用where关键字

varq=fromcindb.view_PrTestList

wherec.FTestmanID.Equals(UserContext.CurrentUser.FID)

selectc;

方式二:

使用lambda表达式

varq=db.TOriInfoAutoMemory.Where(c=>c.FSampleName==sampleName);

 

使用&&和||带代替And或Or关键字:

varentity=db.TSampleOriginalInfo.FirstOrDefault(c=>c.FFromID.Equals(fromID)&&c.FSampleID.Equals(sampleID));

 

like模糊条件查询:

//使用C#中的Contains关键字代替SQL中的like关键字

q=q.Where(c=>c.FTaskCode.Contains(condition.Name));

 

In包含查询:

///string[]

varcerti=(fromcindb.TMSCertificate

wherecertificateIDs.ToList().Contains(c.FID.ToString())

selectc).ToList();

等价于:

select*fromTMSCertificatewhereFIDin/*certificateIDs*/

 

Skip和Take实现分页查询:

varq=fromcindb.view_PrTestList

wherec.FTestmanID.Equals(UserContext.CurrentUser.FID)

selectc;

twi.data=(q.Skip(paging.startIndex).Take(paging.pageSize)).ToList();

//其中startIndex:

跳过的系列中指定的条数

//pageSize:

每页显示条数(记录数)

 

Distinct方法去除重复:

varp=(fromcindc.TSampleOriginalInfo

wheresampleIDs.Contains(c.FSampleID.ToString())

selectnew

{

c.FFromID,

c.FName

}).Distinct();

 

 

查询指定列使new构造集合:

varp=(fromcindc.TSampleOriginalInfo

wheresampleIDs.Contains(c.FSampleID.ToString())

selectnew

{

c.FFromID,

c.FName

}).Distinct();

 

join连接查询:

详见下面的【join查询实例】

//此处省略……

 

 

FirstOrDefault查询满足条件的第一条记录或不存在是返回null,不发生异常:

foreach(varfromIDinfromIDs)

{

varentity=db.TSampleOriginalInfo.FirstOrDefault(c=>c.FFromID.Equals(fromID)&&c.FSampleID.Equals(sampleID));

if(entity!

=null)

{

entities.Add(entity);

}

}

 

LINQtoSQL的重要方法:

SubmitChanges方法:

无论您对对象做了多少项更改,都只是在更改内存中的副本。

您并未对数据库中的实际数据做任何更改。

直到您对DataContext显式调用SubmitChanges方法,您所做的更改才会传输到服务器。

db.SubmitChanges();

新增/删除/修改后都需要显式的调用该方法!

 

以下是几个完整的示例:

///

///添加

///

///要添加的对象

///

publicboolNew(TTrademarkidc)

{

using(CP_DataClassesDataContextdb=newCP_DataClassesDataContext(GS.MODEL.ConnectionStrings.GetInstance("ZJ").Con))

{

if(idc!

=null)

{

db.TTrademark.InsertOnSubmit(idc);

db.SubmitChanges();

returntrue;

}

else

{

returnfalse;

}

}

}

///

///新增多个【使用InsertAllOnSubmit】

///

///

publicvoidNew(GS.MODEL.TItemmodel)

{

using(CP_DataClassesDataContextdb=newCP_DataClassesDataContext(GS.MODEL.ConnectionStrings.GetInstance("ZJ").Con))

{

Listentities=newList();

GS.MODEL.TItementity=newGS.MODEL.TItem()

{

FID=Guid.NewGuid(),

FName=model.FName,

FParentName=model.FParentName,

FFastCode=model.FFastCode,

FRemark=model.FRemark,

FSort=model.FSort

};

entities.Add(entity);

db.TItem.InsertAllOnSubmit(entities);

db.SubmitChanges();

}

}

 

 

///

///修改

///

///

publicvoidEdit(GS.MODEL.TItemmodel)

{

using(CP_DataClassesDataContextdb=newCP_DataClassesDataContext(GS.MODEL.ConnectionStrings.GetInstance("ZJ").Con))

{

GS.MODEL.TItemitems=db.TItem.Single(c=>c.FID==model.FID);

items.FName=model.FName;

items.FParentName=model.FParentName;

items.FRemark=model.FRemark;

items.FSort=model.FSort;

items.FFastCode=model.FFastCode;

db.SubmitChanges();

}

}

 

///

///删除

///

///

publicvoidDelete(string[]ids)

{

using(CP_DataClassesDataContextdb=newCP_DataClassesDataContext(GS.MODEL.ConnectionStrings.GetInstance("ZJ").Con))

{

Listentities=newList();

foreach(varidinids)

{

varentity=db.TItem.FirstOrDefault(c=>c.FID.Equals(id));

if(entity!

=null)

{

entities.Add(entity);

}

}

db.TItem.DeleteAllOnSubmit(entities);

db.SubmitChanges();

}

}

 

 

///

///【简单查询】获取指定计量标准考核证书下的计量标准器/检定规程/主要配套设备

///

///

///

publicIListGetViewByCertificateID(GuidcertifiacteID)

{

using(BPDataContextdb=newBPDataContext(TCTC_ConnectionStrings.connStrJL))

{

vard=fromcindb.view_CertificateOriginalInfo

wherec.FCertificateID==certifiacteID

selectc;

returnd.ToList();

}

}

 

 

///

///【综合查询】我的待检测结果任务单

///

///

///

///

publicTwiReturnGetMyWorkList(PagingConditionpaging,ConditionModelcondition)

{

TwiReturntwi=newTwiReturn();

using(BP_DataClassesDataContextdb=newBP_DataClassesDataContext(ConnectionStrings.GetInstance("ZJ").Con))

{

varq=fromcindb.view_PrTestList

wherec.FTestmanID.Equals(UserContext.CurrentUser.FID)

selectc;

if(condition!

=null)

{

if(condition.NameSign=="TaskCode"&&condition.Name!

="")

{

q=q.Where(c=>c.FTaskCode.Contains(condition.Name));

}

elseif(condition.NameSign=="TestItemName"&&condition.Name!

="")

{

q=q.Where(c=>c.FTestItemName.Contains(condition.Name));

}

}

twi.totalCount=q.Count();

if(paging.needPaging)

{

twi.data=(q.Skip(paging.startIndex).Take(paging.pageSize)).ToList();

}

else

{

twi.data=q.ToList();

}

returntwi;

}

}

 

 

///

///选择计量标准考核证书

///

///

///

publicvoidSelectCertificate(string[]sampleIDs,string[]certificateIDs)

{

BPDataContextbpDC=newBPDataContext(TCTC_ConnectionStrings.connStrJL);

CPDataContextcpDc=newCPDataContext(TCTC_ConnectionStrings.connStrJL);

varcerti=(fromcincpDc.TMSCertificate

wherecertificateIDs.ToList().Contains(c.FID.ToString())

selectc).ToList();

Listentities=newList();

foreach(varsampleIDinsampleIDs)

{

foreach(varcincerti)

{

TSampleOriginalInfoentity=newTSampleOriginalInfo()

{

FID=Guid.NewGuid(),

FFromID=c.FID,

FType=1,

FSampleID=newGuid(sampleID),

FName=c.FCertificateName,

FCode=c.FCode,

FRange=c.FMeasurementRange,

FUncertainty=c.FLevel,

FCertificateNo=c.FCode,//c.FNumber,zjw修改

FValidDateTo=c.FPeriodDate

};

entities.Add(entity);

}

}

bpDC.TSampleOriginalInfo.InsertAllOnSubmit(entities);

bpDC.SubmitChanges();

bpDC.Dispose();

cpDc.Dispose();

}

 

 

///

///获取样品之标准/计量标准器/主要配套设备/检定规程

///

///

///

publicDataTableGetBySampleIDs(ListsampleIDs)

{

using(BPDataContextdc=newBPDataContext(TCTC_ConnectionStrings.connStrJL))

{

varp=(fromcindc.TSampleOriginalInfo

wheresampleIDs.Contains(c.FSampleID.ToString())

selectnew

{

c.FFromID,

c.FType,

c.FName,

c.FCode,

c.FRange,

c.FModel,

c.FUncertainty,

c.FCertificateNo,

c.FValidDateTo,

c.FManufacturer

}).Distinct();

returnLinqToDataTable.ToDataTable(p.ToList());

}

}

 

 

///

///【join查询实例】获取带检测的器具信息

///

///

publicDataTableGetBySampleName(stringsampleName)

{

using(BPDataContextdc=newBPDataContext(TCTC_ConnectionStrings.connStrJL))

{

varsample=fromcindc.view_Sample_WithVCItem

wherec.FEndTag==1&&c.FTaskEndTag==1&&c.FOutSourcingTag==0&&c.FAssignTag==1&&c.FTestCompleteTag==0&&c.FIsOuter=="否"

selectc;

varr=fromsinsample

joinvindc.view_GetSampleLeastOrginalRecord

ons.FIDequalsv.FSampleIDintorecs

fromvinrecs.DefaultIfEmpty()

jointindc.TTask

ons.FTaskIDequalst.FIDintots

fromtints

where(sampleName==""?

true:

s.FName==sampleName)&&(s.FReceiverID==UserContext.CurrentUser.FID||TCTC_ConnectionStrings.TestResultFilterByTester=="0")

orderbys.FName,t.FCode,s.FCode

selectnew

{

SampleID=s.FID,

SampleCode=s.FCode,

s.FName,

s.FAnotherName,

s.FTaskID,

s.FIsRepair,

s.FIsNeedOriginalRecord,

s.FTestProperty,

s.FRepairTag,

s.VCItemID,

s.CertiID,

s.CertiName,

s.TechID,

s.TechName,

s.TechCode,

s.FReTestTag,

s.FReTestFromTag,

v.FNumber,

v.FFileName,

v.FCertificateNo,

v.FOriginalRecordID,

v.FTag,

TaskCode=t.FCode,

t.FRemark,

t.FIsUrgent,

s.FTaskType,

s.FTaskTypeID,

s.FMeasurementRange,

s.FLevel,

s.FSigPrice

};

DataTabledt=LinqToDataTable.ToDataTable(r.ToList());

returndt;

}

}

 

 

LINQ查询返回DataTable类型  

在使用LINQ查询的时候,一般我们会返回List或IList类型,如下所示:

例1:

publicListGetList()

{

using(BPDataContextdb=newBPDataContext(TCTC_ConnectionStrings.connStr))

{

varq=from pindb.TSample

selectp;

returnq.ToList();

}

}

例1实现的是一个最简单的列表查询,返回的是List类型,本身没有任何问题!

但是如果现在希望查询TSample表中的指定几列,代码应该是:

varq=frompindb.TSample

selectnew

{

p.FID,

p.FName

};

returnq.ToList();

现在问题是返回类型该写什么呢?

new{p.FID,p.FName}已经不是TSample类型了,又不支持返回值为List的!

 

可能的解决方案是:

方法一:

先扩展一个类SampleEx

publicclassSampleEx

{

publicGuidFID

{

get;

set;

}

publicstringFName

{

get;

set;

}

}

然后返回List类型

       publicListGetList()

{

using(BPDataContextdb=newBPDataContext(TCTC_ConnectionStrings.connStr))

{

varq=frompindb.TSample

selectnewSampleEx()

{

FID=p.FID,

FName=p.FName

};

returnq.ToList();

}

}

这样就达到了我们想要的目标。

 

问题是解决了,但是再仔细想想这样的解决方案似乎可行性不强。

因为在实际开发中我们经常查询两个表join查询,那么重新组合的字段就比较多了,要每个都去扩展单独的类,工作量太大!

有些人可能会想到用试图,然后dbml会自动帮我们生成类,但是这个工作

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1