C# 操作员'&&';无法应用于类型为';lambda表达式';和';lambda表达式

C# 操作员'&&';无法应用于类型为';lambda表达式';和';lambda表达式,c#,entity-framework,lambda,C#,Entity Framework,Lambda,我想检索所有具有IP或MAC地址的记录,或者如果其中任何一个为空,那么我编写了如下方法:- public IQueryable<Technology> AdvanceSearch(string ip = null, string mac = null, int techtype) { var relatedresourcesID = entities.NetworkInfoes .Where((a =>

我想检索所有具有IP或MAC地址的记录,或者如果其中任何一个为空,那么我编写了如下方法:-

public IQueryable<Technology> AdvanceSearch(string ip = null, string mac = null, int techtype) 
        {
            var relatedresourcesID = entities.NetworkInfoes
                .Where((a => String.IsNullOrEmpty(ip) || a.IPADDRESS.StartsWith(ip)))
                .Where(a2 => String.IsNullOrEmpty(mac) || a2.MACADDRESS.StartsWith(mac)).Select(a3=>a3.WORKSTATIONID);
//code goes here
var relatedresourcesID = entities.NetworkInfoes
                .Where((a => String.IsNullOrEmpty(ip) || a.IPADDRESS.StartsWith(ip)) && (a2 => String.IsNullOrEmpty(mac) || a2.MACADDRESS.StartsWith(mac)) )
                .Select(a3=>a3.WORKSTATIONID);
但我将得到以下错误:-

错误18运算符“&&”不能应用于“lambda”类型的操作数 表达式“和”lambda 表达式“C:\Users\Administrator\documents\visual studio” 2012\Projects\TMS\TMS\Models\Repository.cs 914 24 TMS

您应将单个输入传递到where运算符:

var relatedresourcesID = entities.NetworkInfoes
       .Where(a => (String.IsNullOrEmpty(ip) || a.IPADDRESS.StartsWith(ip)) &&
                   (String.IsNullOrEmpty(mac) || a.MACADDRESS.StartsWith(mac)))
       .Select(a => a.WORKSTATIONID);
注意:您不需要在每个运算符中指定新的参数名称-这些作用域不重叠

另外,不要忘记声明性查询语法,它更具可读性(IMHO),并且根本不会使用lambdas:

var relatedresourcesID = 
     from a in entities.NetworkInfoes
     where (String.IsNullOrEmpty(ip) || a.IPADDRESS.StartsWith(ip)) &&
           (String.IsNullOrEmpty(mac) || a.MACADDRESS.StartsWith(mac))
     select a.WORKSTATIONID;