Luc*_*umb 1 c# linq asp.net-mvc
我不明白为什么这个查询不起作用,能帮帮我吗?
public static IEnumerable<SelectListItem> MyList(int? id, string name="")
{
var list =db.Entity
.Where(p=>
(name==null? p.Name !=null : p.Name==name) &&
(id.hasValue || p.Id==id)
.Select(n=>new SelectListItem()
{
Text=n.Name,
Value=n.Id.ToString()
}).ToList();
return list;
}
Run Code Online (Sandbox Code Playgroud)
当两个参数都为空时我想要完整的列表!! 但是当两个参数都为空时,我得到一个空列表.
代码段代码来自一个包含多个查询的大方法.
如果我理解正确,您不希望在值为时执行过滤null.然后你应该写:
.Where(p=>
(name == null || p.Name == name) &&
(id == null || p.Id == id)
Run Code Online (Sandbox Code Playgroud)
你应该更改为参数的默认值设定的功能的签名name来null,而不是空字符串.
public static IEnumerable<SelectListItem> MyList(int? id, string name = null)
Run Code Online (Sandbox Code Playgroud)
小智 5
根据评论,有两个问题:
首先,你的条件id不太对劲.其次,你的默认参数name是一个空字符串,而不是null.
但是,还有进一步改进的空间:通过在查询中嵌入name == null(和相同id),您的查询将以将null检查转换为SQL 的方式构造.如果name在查询构建之后有可能更改其值,那就很好,但是这里不可能发生这种情况.您可以改为动态构建查询:
我评论了p.Name != null支票.如果你的名字可能null,那么根据问题,你不希望它们被过滤掉name == null.
public static IEnumerable<SelectListItem> MyList(int? id, string name=null)
{
IQueryable<Entity> query = db.Entity;
if (id != null)
query = query.Where(p => p.Id == id);
if (name != null)
query = query.Where(p => p.Name == name);
//else
// query = query.Where(p => p.Name != null);
return query.Select(...).ToList();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1270 次 |
| 最近记录: |