简体   繁体   English

如何在linq中选择多个条件?

[英]How to select with multiple condition in linq?

I use MVC 4 and There are 5 dropdownlist in my view. 我使用MVC 4,并且在我的视图中有5个下拉列表。 when dropdownlist selected text and clicked button search I want to select from 4 table where dropdownlist selected . 当下拉列表选择文本并单击按钮搜索时,我想从选择下拉列表的4个表中进行选择。 and if dropdownlist don't selected not checked in condition. 如果没有选择下拉列表,则不签入条件。

(from met in db.tblMet
                         from useMet in db.tblUseMet.Where(m => m.UseMetID == met.UseMetID_FK).DefaultIfEmpty()
                         from typeMet in db.tblTypeMet.Where(m => m.TypeMetID == met.TypeMetID_FK).DefaultIfEmpty()
                         from mod in db.tblMod.Where(m => m.ModID == met.ModID_FK).DefaultIfEmpty()
                         from affair in db.tblAffairs.Where(m => m.AffairID == met.AffairID_FK).DefaultIfEmpty()
                         from desert in db.tblDeserts.Where(m => m.DesertID == met.DesertID_FK).DefaultIfEmpty()
                         from city in db.tblCities.Where(m => m.CityID == met.CityID_FK).DefaultIfEmpty()
                         from user in db.tblUsers.Where(m => m.UserID == met.UserIDCreate_FK).DefaultIfEmpty()
                         from userCh in db.tblUsers.Where(m => m.UserID == met.UserIDChange_FK).DefaultIfEmpty()
                         from setting in db.tblSettings.Where(m => m.SettingID == met.SettingID_FK).DefaultIfEmpty()
                         from sim in db.tblSims.Where(m => m.SimID == mod.SimID_FK).DefaultIfEmpty()
                         from typemod in db.tblTypeMod.Where(m => m.TypeModID == sim.TypeModID_FK_Kind).DefaultIfEmpty()
                         from gro in db.tblGroupMet.Where(m => m.GroupMetID == met.GroupMetID_FK).DefaultIfEmpty()
                         from group1 in db.tblMetRelateGroups.Where(x => x.MetID_FK == met.MetID).DefaultIfEmpty()
                         from status in db.tblStatus1.Where(m => m.StatusID == met.StatusID_FK).DefaultIfEmpty()

                         where ((city.CityID == City1||city.CityID !=null)
                               && (typeMet.TypeMetID == Type1 || typeMet.TypeMetID != null)
                               && (useMet.UseMetID == Usemeter1|| useMet.UseMetID != null)
                               && (group1.GroupMetID_FK ==Group1 || group1.GroupMetID_FK != null)
                               && (affair.AffairID ==Affair1 || affair.AffairID != null)
                             //|| desert.DesertID==Desert1
                               )

I want to selected dropdownlist selected and if don't select any, not checked in query. 我想选择下拉列表,如果不选择,则不在查询中。 in above code select zero record. 在上面的代码中选择零记录。

You simply use the fluent syntax for this purpose. 您只需为此使用流利的语法。 Here is an example: 这是一个例子:

var lQuery = from met in db.tblMet;

if (City1 != null)
  lQuery = lQuery.Where(r => r.CityID == City1);

...

This way you can dynamically add conditions to your query. 这样,您可以为查询动态添加条件。

If you want to add conditions with an logical OR you need a predicate builder, see https://stackoverflow.com/a/1775057/3936440 . 如果要使用逻辑或添加条件,则需要谓词构建器,请参阅https://stackoverflow.com/a/1775057/3936440

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM