动态Linq查询EFC#

动态Linq查询EFC#,c#,linq,entity-framework,C#,Linq,Entity Framework,我想创建动态linq查询c# 我在谷歌上搜索了很多,但没有得到确切的答案 我有以下领域的候选人(列出了少数) 候选ID JobTitleId 城市ID 部门ID 我想用动态数据创建linq查询,比如 var idArray=[1,2,3,4] var fieldName='CityId' (may be any other of candidate Table) 我需要像candidateCityId(或其他)在idArray中包含的动态查询 我在候选表中有50多个字段,所以不可能为每个字段都

我想创建动态linq查询c#

我在谷歌上搜索了很多,但没有得到确切的答案

我有以下领域的候选人(列出了少数)
候选ID
JobTitleId
城市ID
部门ID

我想用动态数据创建linq查询,比如

var idArray=[1,2,3,4]
var fieldName='CityId' (may be any other of candidate Table)
我需要像candidateCityId(或其他)在idArray中包含的动态查询


我在候选表中有50多个字段,所以不可能为每个字段都写

我在开发库存搜索窗口时遇到了相同的问题。我也在网上搜索了很多,但没有成功。我已经解决了这个问题如下

以下是我的搜索窗口:

在这里,您可以看到有6个组合框,每个组合框有四个选项,如:

  <ComboBoxItem IsSelected="True">Contains</ComboBoxItem>
                                <ComboBoxItem>Does Not Contain</ComboBoxItem>
                                <ComboBoxItem>Begins With</ComboBoxItem>
                                <ComboBoxItem>Ends With</ComboBoxItem>
在“搜索”按钮上,单击:

 List<FilterList> filter = new List<FilterList>();
            filter.Add(new FilterList { combobox = cmbPart.Text, value = txtPart.Text });
            filter.Add(new FilterList { combobox = cmbDescription.Text, value = txtDescription.Text });
            filter.Add(new FilterList { combobox = cmbVendor.Text, value = txtVendor.Text });
            filter.Add(new FilterList { combobox = cmbVendorPart.Text, value = txtVendorPart.Text });
            filter.Add(new FilterList { combobox = cmbManufacture.Text, value = txtManufacture.Text });
            filter.Add(new FilterList { combobox = cmbManuPartNumber.Text, value = txtManuPartNumber.Text });
在这种情况下,您可以使用从数据库获取的列表上的不同查询

总的来说,您可以说不可能像在sql中那样在linq中创建运行时查询

希望这对你有帮助

var answerList = new List(){1,2,3,4};//from DB
var fieldName= FieldDBPath; //from db //eg. CandidateId
var queryableData = _dbEntities.Candidates.Where("@0.Contains(outerIt."+fieldName + ")", answerList).ToList(); var answerList=新列表(){1,2,3,4}//从数据库
var fieldName=FieldDBPath//来自数据库//例如CandidateId
var queryableData=_dbEntities.Candidates.Where(“@0.Contains(outerIt.+fieldName+”),answerList.ToList();
这意味着它将获取answerList中CandidateId包含的所有候选项。

这可能会有所帮助,但我可以使用带有多个字段的where动态编写linq查询。.不,您必须根据案例编写where条件。这是我用“System.Linq.Dynamic”发布的关于GET解决方案的原始帖子。谢谢Sunny。太好了,你能在这里发布你的ans吗。因此,将来我们将参考您的解决方案。
        if (!string.IsNullOrEmpty(filter[0].value))
                {
                    switch (filter[0].combobox)
                    {
                        case "Contains":
                        break;
                        case "Does Not Contain":
                        break;
                 }}
                if (!string.IsNullOrEmpty(filter[1].value))
                {
                    switch (filter[1].combobox)
                    {
                        case "Contains":
                        //code
                 }}
var answerList = new List(){1,2,3,4};//from DB
var fieldName= FieldDBPath; //from db //eg. CandidateId
var queryableData = _dbEntities.Candidates.Where("@0.Contains(outerIt."+fieldName + ")", answerList).ToList();