Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果在何处(entityFramework)合并_C#_Entity Framework - Fatal编程技术网

C# 如果在何处(entityFramework)合并

C# 如果在何处(entityFramework)合并,c#,entity-framework,C#,Entity Framework,有没有办法把这条线合并成一条 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 &

有没有办法把这条线合并成一条

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)) 
}
...
像这样的

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

LINQ允许您具有多个
,其中
条件。因此,最简单的方法是为每个
列表
使用单独的
Where
条件

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));
}

LINQ允许您具有多个
,其中
条件。因此,最简单的方法是为每个
列表
使用单独的
Where
条件

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));
}

如果同时存在字符串列表和int列表,则会出现问题

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))

如果同时存在字符串列表和int列表,则会出现问题

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))
您可以这样做:

var found = ctx.table.Where(o => (!List1.Any() || List1.Contains(o.item1))
                                 && (!List2.Any() || List2.Contains(o.item2))
                                 && (!List3.Any() || List3.Contains(o.item3)));
请注意,
ListX.Any()
本身就是短路,因此性能优于
ListX.Count>0

您可以这样做:

var found = ctx.table.Where(o => (!List1.Any() || List1.Contains(o.item1))
                                 && (!List2.Any() || List2.Contains(o.item2))
                                 && (!List3.Any() || List3.Contains(o.item3)));

请注意,
ListX.Any()
本身就是短路,因此性能优于
ListX.Count>0

List1、List2等的类型是什么?List1、List2等的类型是什么?您认为这对
IEnumerable
有效吗?;)@Leo是非泛型类型吗?不,不会,因为LINQ扩展方法只在通用的
IEnumerable
接口上实现。您认为这在
IEnumerable
上有效吗?;)@Leo是非泛型类型吗?不,不会,因为LINQ扩展方法只在通用
IEnumerable
接口上实现。