【问题标题】:Dynamic where in LINQLINQ 中的动态位置
【发布时间】:2011-05-05 03:49:20
【问题描述】:

您好,我有这个 LINQ 查询:

var q =
    (from vr in Util.db.ValuationsRequests
     where vr.dtSubmitted != null
     select vr
     ).AsEnumerable<ValuationsRequest>();

但我想用另外 3 个参数进行搜索:paramValuationId (int)、paramValue (boolean)、paramTitle (string)。

类似:

if (paramTitle != string.empty)
//add this field to the where

但如果 paramTitle 为空,我不想搜索它。

这样做的正确方法是什么?

【问题讨论】:

  • 与您的可选参数比较的对应字段是什么?

标签: c# sql linq search


【解决方案1】:
string paramTitle = "hello";
var q =
    (from vr in Util.db.ValuationsRequests
     where vr.dtSubmitted != null 
       && ( paramTitle == "" || vr.paramTitle == paramTitle)
     select vr
     ).AsEnumerable<ValuationsRequest>();

【讨论】:

  • 你的 AND 子句让我的眼睛受伤了。 &amp;&amp; (paramTitle == "" || vt.paramTitle == paramTitle) 请!
  • @fearofawhackplanet....大声笑,对不起...你的权利,应该简化
  • paramTitle == "" 不会导致字段上的任何索引不被使用吗?在代码中动态构建 where 然后只执行适用的 SQL 不是更好吗?
  • 我已经接受了你的回答,也给了你 +1 让你更清楚。顺便说一句:你有“vt.paramTitle”它是“vr.paramTitle”,我希望没有人对此感到困惑。 :) @fearofawhackplanet 我也给了你一个 +1。
  • 太棒了,我一直在想办法做到这一点。 @Dave 有正当的顾虑吗?
【解决方案2】:
var q =
(from vr in Util.db.ValuationsRequests
 where vr.dtSubmitted != null
 select vr
 ).AsEnumerable<ValuationsRequest>();

if(!string.IsNullOrEmpty(paramTitle))
   q = q.Where(p => p.ParamTitle == paramTitle);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多