【问题标题】:Select Multi fields in Entity framework in c#在 C# 的实体框架中选择多字段
【发布时间】:2015-11-30 13:50:24
【问题描述】:

我想选择 2 个或更多这样的字段:例如,我们有一些人的列表,现在他们说要找到住在纽约的男性
我们在这里有 2 个字段“城市”和“性”。

我可以这样做

private List<tblTest> GetAll(string city, string sexual)
{
    var all = (from x in db.tblTest
               where x.city == city && x.sexual == sexual
               select x).ToList();
    return all;
}

这个没有帮助:

private List<tblTest> GetAll(string city, string sexual)
{
    var all = (from x in db.tblTest
               where x.city == city || x.sexual == sexual
               select x).ToList();
    return all;
}

使用“&amp;&amp;”我可以做到,但如果我只想选择“City”它不起作用,我想像这样搜索 14 个字段,我们想搜索一些字段而不是全部我们拥有的字段,但我们不知道要搜索哪些字段

我该怎么办?

【问题讨论】:

  • 您是说要传入数量不定的过滤器吗?所以它可能只是城市,但下一次可能是城市和性?
  • 如果基于变量null 可能类似于where (city == null || x.city == city) &amp;&amp; (sexual == null || x.sexual == sexual)
  • 你会发现这个answer很有用。
  • @StephenBrickner 不,它不会,延迟执行意味着它仅在您将查询具体化为列表或通过它枚举时才会访问数据库。
  • @StephenBrickner 是的,但这很容易走到最后。

标签: c# entity-framework


【解决方案1】:

我的做法如下:

private List<tblTest> GetAll(string city, string sexual)
{
    var query = db.tblTest.AsQueryable();
    if(!string.IsNullOrEmpty(city))
    {
        query = query.Where(x => x.city == city);
    }
    if(!string.IsNullOrEmpty(sexual ))
    {
        query = query.Where(x => x.sexual == sexual );
    }
    return all.ToList();
}

调用AsQueryable很重要,否则如果你写IEnumerable&lt;tblTest&gt; query = ...,结果可能会被查询超过1次。

【讨论】:

  • @MichaelMairegger 感谢您编辑answer,希望对您有所帮助,并使其对未来的读者更有用 +1 回答您的问题:)
猜你喜欢
  • 1970-01-01
  • 2021-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-03
  • 1970-01-01
  • 2022-12-12
相关资源
最近更新 更多