【问题标题】:filtering results with Entity Framework使用实体框架过滤结果
【发布时间】:2015-07-01 22:09:41
【问题描述】:

我猜是另一个新手问题。我有 EF 设置,现在我想根据过滤器选择一些记录。我有带有 4 个项目的 SomeClass(所有字符串都是为了简单起见,我们称它们为 string1、string2 等等)。现在,在一篇文章中,我将过滤器发送到 SomeClass 的实例中,但可能并非所有属性都已填写。 所以你最终可能会得到 string1="something"、string2="bla" 和 string4="bla2"。所以字符串 3 = null。现在,如何设置查询?如果我尝试类似:

var dataset = entities.mydatabase
    .Where(x => x.string1 == someclass.string1 && x.string2 == someclass.string2 && x.string3 == someclass.string3 && x.string4 == someclass.string4)
.Select(x => new { x.string1, x.string2, x.string3, x.string4}).ToList();

...我没有得到任何结果,因为 string3=null。我可以检查所有参数并查看它们是否已设置并基于此创建查询,但必须有比这更优雅的东西。

有人吗?

谢谢! 罗纳德

【问题讨论】:

    标签: c# linq entity-framework


    【解决方案1】:

    以下将返回someclass.string 为空OR 等于x.string 的所有行。

    var dataset = entities.mydatabase
        .Where(x => someclass.string1 == null || x.string1 == someclass.string1)
        .Where(x => someclass.string2 == null || x.string2 == someclass.string2)
        .Where(x => someclass.string3 == null || x.string3 == someclass.string3)
        .Where(x => someclass.string4 == null || x.string4 == someclass.string4)
    .Select(x => new { x.string1, x.string2, x.string3, x.string4}).ToList();
    

    【讨论】:

    • 太棒了!简单,只是基本的 SQL (blush)
    • 另一个(猜一个简单的),如何将结果转换为 List
    • @Ronald 只需使用 Select 函数以您想要的方式投影对象.. .Select(x => new SomeClass{ p1 = x.string1, p2 = x.string2 }).ToList()
    • 是的,成功了!谢谢!转换很简单,你的 'var' 是正确的类型,不需要转换,至少,我序列化它并返回集合,调用者将它反序列化到同一个类,就是这样!
    • 感谢您将我指向该帖子。一个额外的构造函数可以解决这个问题。
    猜你喜欢
    • 2018-05-28
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 2019-04-14
    • 2017-11-08
    • 2014-12-19
    • 1970-01-01
    相关资源
    最近更新 更多