首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Linq with Logic

Linq with Logic
EN

Stack Overflow用户
提问于 2012-03-12 17:42:54
回答 3查看 67关注 0票数 0

我有一个简单的Linq语句(使用EF4)

代码语言:javascript
运行
复制
var efCars = (from d in myentity.Cars
         where d.CarName == inputCar.CarName
         && d.CarIdNumber == inputCar.IdNumber
         && d.Make == inputCar.Make
         select d.Car);

我希望它更智能,以便它只会在3个字段中的一个或多个字段中查询,如果它们有值。

我可以在之前做一个测试,然后为inputcar的每个value排列创建一个单独的linq语句(例如,一个用于所有3,一个用于如果只有carname有值,一个用于如果carname和CarIdNumber有值,等等)

但一定有更聪明的方法

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-12 18:01:28

如果"has no value“表示null,那么您可以使用null合并运算符??换句话说,如果填充了第一个值,就取第一个值,否则取第二个值:

代码语言:javascript
运行
复制
var efCars = (from d in myentity.Cars
where d.CarName == (inputCar.CarName ?? d.CarName
&& d.CarIdNumber == (inputCar.IdNumber && d.CarIdNumber)
&& d.Make == (inputCar.Make && d.Make)  
select d.Car);

这基本上是说,如果值存在,则必须匹配,否则将其视为匹配

然而,如果你说“当一个特殊的值(空字符串)忽略它,否则匹配”,那么你可以做两种方法中的一种(或者更多!):

代码语言:javascript
运行
复制
where (inputCar.CarName == "" || d.CarName == inputCar.CarName)  

where (string.IsNullOrEmpty(inputCar.CarName) || d.CarName == inputCar.CarName)
票数 1
EN

Stack Overflow用户

发布于 2012-03-12 18:29:31

为了提高性能(在处理数据库查询时),让EF基于过滤器生成查询,而不是使用一个通用查询,有时可能是有益的。当然,您需要分析它在这种情况下是否对您有帮助(永远不要过早优化),但如果您动态构建查询,它将是这样的:

代码语言:javascript
运行
复制
var efCars =
    from car in myentity.Cars
    select car;

if (inputCar.CarName != null)
{
    efCars =
        from car in efCars
        where care.CarName == inputCar.CarName
        select car;
}

if (inputCar.IdNumber != null)
{
    efCars =
        from car in efCars
        where care.CarIdNumber == inputCar.IdNumber
        select car;
}

if (inputCar.Make != null)
{
    efCars =
        from car in efCars
        where care.Make == inputCar.Make
        select car;
}
票数 1
EN

Stack Overflow用户

发布于 2012-03-12 18:08:32

where (inputCar.CarName != null || d.CarName == inputCar.CarName) &&...

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9664698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档