簡體   English   中英

C#Linq通過列表搜索到linq

[英]C# Linq Search by a list into a linq

對象:

ticketTypeRep = new TicketTypeRepository();
packageRep = new PackageRepository();

數據來自用戶搜索的以下列表:

var pases = ticketTypeRep.Fetch()
    .Where(x => x.VTP_NOMBRE_PASE.ToUpper().Trim().Contains(searchString.ToUpper().Trim()))
    .Select(x => new { id = x.VTP_COD_TIPOPASE}).ToList();

我正在嘗試使用該數據作為列表來搜索另一個列表中的每個項目

var packageWithPase = packageRep.Fetch()
    .Where(x => x.PKG_TICKETTYPE.Trim().Contains("21"))
    .Select(x => new { id = x.PKG_SEQID, name = x.PKG_NAME, state = x.PKG_STATE, details = x.PKG_SEQID, edit = x.PKG_SEQID })
    .OrderBy(x => x.name).ToList();

問題是“ 21”必須是第一個名為pases的列表的結果,而不是簡單的字符串。

我想通過列表搜索到linq。

您想要做的是另一種比較方式,例如:

passes.Contains(x.PKG_TICKETTYPE.Trim())

記住這不是String.Contains而是Enumerable.Contains所以您的查詢將是:

var packageWithPase = packageRep.Fetch()
                        .Where(x => passes.Contains(x.PKG_TICKETTYPE.Trim())
                        .Select(x => new
                        {
                            id = x.PKG_SEQID, 
                            name = x.PKG_NAME, 
                            state = x.PKG_STATE, 
                            details = x.PKG_SEQID, 
                            edit = x.PKG_SEQID
                        }).OrderBy(x => x.name)
                        .ToList();

尚不清楚您想要什么,但是看起來您想要記錄其中pases包含PKG_TICKETTYPE值的記錄,該值將是:

var packageWithPase = packageRep.Fetch()
                                .Where(x => pases.Contains(x.PKG_TICKETTYPE.Trim())
                                .Select...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM