iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 28
0
自我挑戰組

ArasPLM開發分享系列 第 28

[Day28]使用C#的LINQKit來完成SQL資料庫的自訂查詢

  • 分享至 

  • xImage
  •  

當我們在使用C#的Linq來查詢SQL資料庫時,常常會利用Where的方式來篩選條件,若是今天想自訂查詢,例如where條件後包括AND或是OR的功能,又不想一值重複性的撰寫code,這時候就能使用LinqKit來達成功能

Example

  1. 首先要使用LinqKit時必須先到NuGet中將LinqKit安裝至參考當中,之後要使用Linq與LinqKit必須先在Controller當中using System.Linq與using LinqKit

  2. 下方的Code範例為自訂查詢的LinqKit轉換為Linq的Where篩選查詢

var predicate = PredicateBuilder.New<CAD_STRUCTURE>();
pred = pred.Or(o => o.SOURCE_ID == "123");
pred = pred.Or(o => o.RELATED_ID == "XYZ");
cad.CAD_STRUCTURE.AsExpandable().Where(pred);
//等同於
cad.CAD_STRUCTURE.Where(o => o.SOURCE_ID == "123" || o.RELATED_ID == "XYZ")

var predicate = PredicateBuilder.New<CAD_STRUCTURE>();
pred = pred.And(o => o.SOURCE_ID == "123");
pred = pred.And(o => o.RELATED_ID == "XYZ");
cad.CAD_STRUCTURE.AsExpandable().Where(pred);
//等同於
cad.CAD_STRUCTURE.Where(o => o.SOURCE_ID == "123" && o.RELATED_ID == "XYZ")

Controller

  1. 這邊的範例為延續昨天介紹的多階父子階ID,將兩者加進LinqKit的SQL自訂查詢,最後查詢出資料表CAD_Structure中的多階父子階圖號,若想了解如何利用遞迴方式查詢出多階的父子階圖號,可以看 (https://ithelp.ithome.com.tw/articles/10224860) 的介紹
var predicate = PredicateBuilder.New<CAD_STRUCTURE>();

for (int i = 0; i <= Select_Level_ParentList.Count() - 1; i++)
{
    if (!String.IsNullOrEmpty(Select_Level_ParentList[i]))
    {
        string Select_Level_Son = Select_Level_SonList[i];
        string Select_Level_Parent = Select_Level_ParentList[i];

        predicate = predicate.Or(o => o.RELATED_ID == Select_Level_Son && 
                                 o.SOURCE_ID ==  Select_Level_Parent);
    }
    else
    {
        ErrorNullModel NULL = new ErrorNullModel();
        ParentViewModelPagedList nullmodel = NULL.NullModel();

        int currentPages = pages < 1 ? 1 : pages;
        var results = nullmodel.ParentModel.ToPagedList(currentPages, pageSize);
        Response.Write("<script language=javascript>alert('父階圖號不可為空');
                        </"+ "script>");
        return View(results);
    }
}

var where_CAD_STRUCTURE = db.CAD_STRUCTURE
                            .Where(predicate);

上一篇
[Day27]利用C#與SQL的遞迴查詢找出Aras CAD的多階父子階
下一篇
[Day29]在MVC中利用ViewModel將Model的兩個資料表合併為自訂資料表
系列文
ArasPLM開發分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言