[英]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.