簡體   English   中英

C# Linq where 子句作為變量

[英]C# Linq where clause as a variable

我正在嘗試創建一個 LINQ 語句,其中 where 子句來自一個變量。 例如:

string whereClause = address.zip == 23456;
var x = from something in someList where whereClause;

這可能嗎? 我似乎無法讓它工作。

謝謝,

更新 - 我的 where 子句是預定義的,將基於用戶輸入,所以我認為這對我不起作用。 基本上 whereClause 不是在方法中構造的,它是執行 LINQ 的方法的參數。 我沒有很好地解釋這里是一個更好的例子:

public void doLnq(string whereClause)
{
   var x = from something in someList where whereClause;
   dowork(x);
}

更新 - 總結一些建議並將所有內容集中起來。

我不能使用 switch 來生成 where 子句,因為有很多可能性。

你們中的一些人發布的動態 linq 帖子看起來很有希望,但我在將 linq to sql 示例與我的 linq to objects 問題相關聯時遇到了麻煩。

和@sLaks 在瀏覽了 msdn http://msdn.microsoft.com/en-us/library/bb353734.aspx 之后我無法弄清楚你打算在哪里使用 AsQueryable

謝謝,

您需要組裝一個Expression<Func<T, bool>>並將其傳遞給Where()擴展方法:

Expression<Func<T, bool>> whereClause = a => a.zip == 23456;
var x = frSomeList.Where(whereClause);

編輯:如果您使用 LINQ to Objects,請刪除Expression一詞以創建普通委托。

這:

var query = from something in someList where whereClause;

是簡寫:

var query = someList.Where(something => whereClause);

假設someList是一個IEnumerable<Address>Where指的是Enumerable.Where 擴展方法 此方法需要一個Func<Address, bool> ,您可以按如下方式定義:

Func<Address, bool> whereClause = address => address.Zip == 23456;
var query = someList.Where(whereClause);

正如 Richard 所指出的,動態查詢庫可用於構建動態過濾器表達式。 使用 Linq-To-Objects 時,請確保首先將IEnumerable<T>轉換為IQueryable<T> 這是一個(不完整的)示例:

using System.Linq.Dynamic;

namespace System.Linq.Dynamic
{
  public class Example
  {
   // Assuming some value is assigned to below field somewhere... 
   private IEnumerable<Address> m_Addresses;

   public void FilterByZipCode(string zipCode)
   {
      var x = m_Addresses.AsQueryable().Where("Zip == @0", zipCode);
      dowork(x);
   }
  }

  public class Address
  {  
     public String Zip { get; set; }

     // More Properties...  
  }
}

這是 LINQ 的內置功能。 只需使用 Where 擴展方法。

有關詳細信息,請參閱LINQ 查詢語法與方法語法 (C#)

可以嘗試:

var lstQ_Buffer = new List<Q_Buffer>();

得到

lstQ_Buffer = unitOfWork.Q_BufferRepository.Get().ToList();

然后申請哪里

if (lstQ_Buffer.Count > 0)
{
    lstQ_Buffer = lstQ_Buffer.Where(q => q.fkProgramId == programId && q.fkYearId == yearId && q.fkSemesterId == semesterId && q.fkCourse_ModuleId == courseModuleId && q.fkSubject_SpecialtyId == subjectSpecialtyId && q.fkSubSpecialtyId == subSpecialtyId && q.fkTopicId == topicId && q.fkSubTopicId == subTopicId && q.fkDifficultyLevelId == diffucultyLevelId).ToList();
}

暫無
暫無

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

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