C#Linq where子句作为变量

问题描述 投票:42回答:5

我正在尝试编写LINQ语句,其中where子句来自变量。例如:

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

这可能吗?我似乎无法使其正常工作。

谢谢,

更新-我的where子句是预定义的,并将基于用户输入,因此我认为这对我不起作用。基本上,在方法中未构造Clause的地方,它是执行LINQ的方法的参数。我没有很好地解释这是一个更好的例子:

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

更新-只是总结一些建议并集中所有内容。

我不能使用开关来生成where子句,因为有很多方法可以实现。

你们中的一些人发布的动态linq帖子确实看起来很有希望,但是我在将linq到sql示例与我的linq到对象问题相关联时遇到了麻烦。

和@sLaks浏览msdn http://msdn.microsoft.com/en-us/library/bb353734.aspx之后,我在弄清楚您打算在哪里使用AsQueryable时遇到了麻烦

谢谢,

c# linq linq-to-objects
5个回答
66
投票
Expression<Func<T, bool>> whereClause = a => a.zip == 23456; var x = frSomeList.Where(whereClause);

EDIT:如果您使用的是LINQ to Objects,请删除单词Expression以创建普通的委托。

11
投票
var query = from something in someList where whereClause;

是以下简称:

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

假设someListIEnumerable<Address>Where是指Enumerable.Where Extension Method。此方法需要一个Func<Address, bool>,您可以定义以下内容:

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

4
投票
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... } }

1
投票
请参阅LINQ Query Syntax versus Method Syntax (C#)以获取更多信息。

0
投票
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();
}
© www.soinside.com 2019 - 2024. All rights reserved.