C# 具有多个条件where子句的LINQ查询

C# 具有多个条件where子句的LINQ查询,c#,asp.net,linq,C#,Asp.net,Linq,我似乎不知道如何使用基于多个可空变量的where子句进行LINQ查询。我尝试了我在这个网站上看到的“如果”方法,我得到了错误: 名称I在当前上下文中不存在 “点”字段的格式为“点(num1,num2)”,在SQL查询中可以正常工作 query = from i in _db.ILV join p in _db.PC on i.PostCode equals p.PostCode select

我似乎不知道如何使用基于多个可空变量的where子句进行LINQ查询。我尝试了我在这个网站上看到的“如果”方法,我得到了错误:

名称I在当前上下文中不存在

“点”字段的格式为“点(num1,num2)”,在SQL查询中可以正常工作

query = from i in _db.ILV
        join p in _db.PC on
             i.PostCode equals p.PostCode                        
        select i;

if (!string.IsNullOrEmpty(key))
    query = query.Where(i = i.Description.Contains(key));

if(!string.IsNullOrEmpty(rng))
    query = query.Where(i => STGeomFromText(i.Point).STDistance(q.Point) <= rng);

if (!string.IsNullOrEmpty(cat))
    query = query.Where(i = i.CategoryID.ToInt(cat));

if(!string.IsNullOrEmpty(sub))
    query = query.Where(i = i.SubCategoryID.ToInt(sub));

return query;
query=from i in_db.ILV
在上加入p_db.PC
i、 邮政编码等于邮政编码
选择i;
如果(!string.IsNullOrEmpty(key))
query=query.Where(i=i.Description.Contains(key));
如果(!string.IsNullOrEmpty(rng))

query=query.Where(i=>STGeomFromText(i.Point).STDistance(q.Point)如果使用i=>而不是i=,这将起作用。但是,您可以将其全部放在一个块中,如下所示:

query = from i in _db.ILV
        join p in _db.PC on
            i.PostCode equals p.PostCode   
        where (!string.IsNullOrEmpty(key)) ? i.Description.Contains (key) : true &&
              (!string.IsNullOrEmpty(rng)) ? // rest of your where clauses follow the same pattern          
        select i;

我认为它看起来更像这样:where(string.IsNullOrEmpty(key)| | I.Description.Contains(key))&&(string.IsNullOrEmpty(rng)| |……)&&只要您确定了条件,我更喜欢IO的选项,即使用延迟执行来构建查询,而不是使用数据库可能需要或可能不需要的求值来膨胀查询,这可能会在数据库级别上降低查询速度,使用大型表。您使用=>vs=是正确的。但是,这很有效!谢谢,Andrew!顺便说一句,我试过使用I=>和I==,但它给出了与I=.相同的错误。如果我需要为字符串和ID设置多个查询,我该怎么做?您使用的是什么风格的LINQ(EF/L2S)?声明了
STGeomFromText
STDistance
在哪里?声明了
q
在哪里?我正在使用Visual Studio 2013.Net Framework 4.5。STGeomFromText和STDistance是System.Spatial.Geography类中的方法,q在linq查询之前声明为:q=from z in_db.PC,其中(z.PostCode==zip)选择z;