在Where中实现if(entityFramework)

时间:2016-01-04 07:27:49

标签: c# entity-framework

有没有办法将这一行合并为一个?

<button>

像这样的东西

if(List1.count>0 && List2.count>0 && List3.count>0)
{
    ctx.table.where(o=>List1.contains(o.item1) && List2.contains(o.item2)  &&  List3.contains(o.item3))
}

else if(List1.count>0 && List2.count>0 && List3.count==0)
{
    ctx.table.where(o=>List1.contains(o.item1) && List2.contains(o.item2)) 
}

else if(List1.count>0 && List2.count==0 && List3.count>0)
{
    ctx.table.where(o=>List1.contains(o.item1) && List3.contains(o.item3)) 
}
...

4 个答案:

答案 0 :(得分:2)

LINQ允许您拥有多个Where条件。因此,最简单的方法是为每个Where单独使用List条件。

IEnumerable<int> collection = ctx.table;
if(list1.Count > 0)
{
    collection = collection.Where(o => list1.Contains(o.item1));
}
if(list2.Count > 0)
{
    collection = collection.Where(o => list2.Contains(o.item2));
}
if(list3.Count > 0)
{
    collection = collection.Where(o => list3.Contains(o.item3));
}

如果您真的只想拥有1行,可以使用listX.Count > 0 ? listX.Contains(o.itemX) : true来将这些条件合并为1 结果将是:

IEnumerable<int> collection = ctx.table.Where(o => 
    list1.Count > 0 ? list1.Contains(o.item1) : true && 
    list2.Count > 0 ? list2.Contains(o.item2) : true &&
    list3.Count > 0 ? list3.Contains(o.item3) : true);

答案 1 :(得分:1)

ctx.table.where(o=> List1.count>0 ? List1.contains(o.item1) : true && List2.count>0 ? List2.contains(o.item2) : true && List3.count>0 ? List3.contains(o.item3) : true);

答案 2 :(得分:1)

你可以这样做:

ListX.Any()

请注意,ListX.Count > 0本质上是短路的,因此效果优于routes: { '/': { templateUrl: 'views/login.html', dependencies: [ 'scripts/controllers/login.js', ] }, '/abc-view': { templateUrl: 'views/abc.html', requireLogin: true, dependencies: [ 'scripts/controllers/abc.js', 'scripts/controllers/xyz.js', ] }, '/xyz-view': { templateUrl: 'views/xyz.html', requireLogin: true, dependencies: [ 'scripts/controllers/xyz', } }

答案 3 :(得分:0)

存在字符串List和int List

时出现问题
Where(o=>(Stringlist1.Count > 0) ? Stringlist1.Contains(o.string1) : true && 
(Intlist1.Count > 0 ?) Intlist1.Contains(o.Int1) : true)

但如果把它们分成两部分就可以了。

Where(o=>(Stringlist1.Count > 0) ? Stringlist1.Contains(o.string1) : true ).Where(o=> 
(Intlist1.Count > 0 ?) Intlist1.Contains(o.Int1) : true)

你有什么想法吗?

///////////////////////////////////////

我找到了解决方案,所有部分都必须在括号中

Where(o=>((Stringlist1.Count > 0) ? Stringlist1.Contains(o.string1) : true ) && 
  ((Intlist1.Count > 0 ?) Intlist1.Contains(o.Int1) : true))