2016-03-22 54 views
0

我有一个查询,它会给出结果集。基于我想写where子句的条件。这意味着。我有一个变量x,如果x的值是“ALL”,那么我不想添加这个条件。如果该值不是“ALL”,那么我需要添加一个where子句(其中st.address = = X)。我如何在下面的查询中添加这个条件。如何在单个linq查询中给出条件where子句?

var abc=(from st in Context.STopics join ap in Context.ATopic on st.id equals ap.id 
where st.address==x 
select new result() 
{ 
name = st.name 
add= ap.add}).ToList(); 
+0

这不是重复。 – poc

+0

_“这不是重复的”_ - 五个用户不同意你的意见。我同意他们。你为什么认为它不是? – CodeCaster

回答

3

这里是你在找什么:

var yourQuery = Context.STopics.AsQueryable(); 
var yourParam = "ALL"; 
if(yourParam != "ALL") 
    yourQuery = yourQuery.Where(x => x.IsActive==true && x.StudentID == 123); 

var abc = yourQuery.Select(x=> new result() 
           { 
            name = st.name 
           }).ToList(); 

的事情是,与LINQ你没有从查询中获取数据的时候了。因此,您可以根据需要以这种方式构建您的实际查询。

+0

@CodeCaster我的不好 –

1

你可以让你的条件的所有元素相匹配时x = "ALL"否则匹配您的其他条件的方式:

var abc=(from st in Context.STopics 
where x == "ALL" || (st.IsActive==true && st.StudentID == 123) 
select new result() 
{ 
name = st.name }).ToList(); 
+2

我想我已经问了几次之前,但_please_添加一些解释给你的答案,而不是倾销“固定”的代码。如果可以阻止,您也不希望在数据库上执行此查询。它会变成'WHERE'ALL'='ALL'',这可以通过任何一种方式在客户端完成。 – CodeCaster

+0

@CodeCaster现在更好吗? –

+0

是的,谢谢。它有助于后来的读者看到你做了什么。 – CodeCaster

0

喜欢的东西:

var abc=(from st in Context.STopics 
where (x!="All" ? (st.IsActive==true && st.StudentID == 123)) 
select new result() 
{ 
    name = st.name 
}).ToList();