gpt4 book ai didi

c# - 运算符 '&&' 不能应用于类型 'lambda expression' 和 'lambda 表达式的操作数

转载 作者:太空狗 更新时间:2023-10-29 22:32:38 25 4
gpt4 key购买 nike

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

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

但我不确定 EF 将如何转换 .where ;它会仅在应用第一个 .Where 子句后应用第二个 .Where() 吗?

第二个问题,如何将所有检查应用到一个 .Where() 中??

我尝试重写我的方法如下:-

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);

但我会收到以下错误:-

Error 18 Operator '&&' cannot be applied to operands of type 'lambda expression' and 'lambda expression' C:\Users\Administrator\documents\visual studio 2012\Projects\TMS\TMS\Models\Repository.cs 914 24 TMS

最佳答案

你应该通过 single lambda expression进入 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);

注意:您不需要在每个运算符中分配新的参数名称 - 这些范围不会重叠。

另外不要忘记声明式查询语法,它更具可读性(恕我直言)并且根本不会使用 lambda:

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;

关于c# - 运算符 '&&' 不能应用于类型 'lambda expression' 和 'lambda 表达式的操作数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19600798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com