2011-07-15 136 views
0

是否有可能... ???我的主页上有4个DropDownLists,用户可以从DropDownLists的任何,全部或部分 中进行选择。我正在使用SESSION 变量捕获他们的选择(或不选择)。我希望能够做的是通过会话 变量值到我的数据访问层,并建立一个WHERE子句 (可能使用StringBuilder的),然后把这个变量不知何故进入 我的查询表达式。那可能吗???对不起,我是新手。谢谢〜苏珊〜LINQ到实体复杂的查询

public class DLgetRestaurants 
    { 
     FVTCEntities db = new FVTCEntities(); 

     public List<RESTAURANT> getRestaurants(string cuisineName, string priceName, string cityName) 

     [Build a string based on the values passed to the function] 

     { 
      var cuisineID = db.CUISINEs.First(s => s.CUISINE_NAME == cuisineName).CUISINE_ID; 

      List<RESTAURANT> result = (from RESTAURANT in db.RESTAURANTs.Include("CITY").Include("CUISINE").Include("Price") 
             where **[USE STRINGBUIDER EXPRSSION HERE]** 
             select RESTAURANT).ToList(); 


      return result; 
     } 
    } 

回答

0

我已经在使用Dynamic Linq Library过去做到了这一点。

+0

我不熟悉如何做到这一点。你有样品吗? – Susan

+0

您必须添加对System.Linq.Dynamic的引用。然后,你可以写这样的查询db.Restaurants.Where(myFilter)。 Myfilter是一个字符串,可以包含“cuisine_name ='意大利语'” – boca

+0

哇,谢谢!这对简化我的代码很有帮助。问候,〜苏珊〜 – Susan

1

您可以撰写凡被挂条件的逻辑并在LINQ扩展方法的语法比较简单:

var query = db.RESTAURANTs.Include("CITY").Include("CUISINE").Include("Price"); 

if (userHasSelectedInDDL1) 
    query = query.Where(r => r.PropertyForDDL1 == ValueFromDDL1); 

if (userHasSelectedInDDL2) 
    query = query.Where(r => r.PropertyForDDL2 == ValueFromDDL2); 

if (userHasSelectedInDDL3) 
    query = query.Where(r => r.PropertyForDDL3 == ValueFromDDL3); 

if (userHasSelectedInDDL4) 
    query = query.Where(r => r.PropertyForDDL4 == ValueFromDDL4); 

List<RESTAURANT> result = query.ToList(); 

一个更加灵活的解决方案来构建动态查询的动态LINQ库推荐博卡可能更好的选择。

+0

非常感谢!我将尝试动态LINQ库 – Susan