Cat*_*key 2 c# linq coalesce null-coalescing-operator
我使用Linq从4个级联下拉菜单中返回ID.
用户可能已从1个或所有菜单中选择了1个或多个值.从用户选择中,我然后查询DataTable的文本列以获取代表ID.
如果用户从第4(和最低级别)下拉菜单中进行选择,那么他们将从上述所有选项中进行选择.
如果用户从菜单1中选择"X",从菜单2中选择"Y",而在其他人中没有任何内容我希望看到results110行,其中"X"存在于[Col_1]中,然后将查询说明results2[Col_2]中存在"Y"的5行.
编辑 守则(基本形式)
var results1 =
from a in dt.AsEnumerable()
where stringArray1.Contains([Col1])
select a;
var results2 =
from a in results1
where stringArray2.Contains([Col2])
select a;
var results3 =
from a in results2
where stringArray3.Contains([Col3])
select a;
var results4 =
from a in results3
where stringArray4.Contains([Col4])
select a;
var results = results4 ?? results3 ?? results2 ?? results1;
Run Code Online (Sandbox Code Playgroud)
results4取决于来自results3,results3打开results2和results2打开的结果results1.
它可能results4 - 2是空的,因此我想知道我是否可以将这些合并为最终变量,例如:
var results = results4 ?? results3 ?? results2 ?? results1;
Run Code Online (Sandbox Code Playgroud)
这是抛出错误:
Operator '??' cannot be applied to operands of type 'System.Collections.Generic.IEnumerable<AnonymousType#4>'
Run Code Online (Sandbox Code Playgroud)
有没有人有任何狡猾的想法如何解决这个问题?我尽量不写很长的啰嗦代码,处理每一个可能的结果.
提前谢谢大家(希望这个问题有道理!)
厘米
因此,基于您正在使用的查询,结果都不会是null.其中一些可能是空的,但它们不会null.这意味着??操作员不会做任何有用的事情.
你希望这个表现如何?你想说,"如果这个结果是空的,那就用另一个吗?" 为此使用我在下面写的方法.
public static IEnumerable<T> Coalesce<T>(IEnumerable<T> first, IEnumerable<T> second)
{
if(first == null || !first.Any())
{
return second;
}
else
{
return first;
}
}
Run Code Online (Sandbox Code Playgroud)
这可以用作:
Coalesce(results4, Coalesce(results3, Coalesce(results2, results1)));
Run Code Online (Sandbox Code Playgroud)
结果是,"返回result4,除非它是空的.如果它是空的返回results3.如果results3是空的返回results2,如果results2是空的返回results1."
如果你认为你已经足够使用它,你可以使它成为一种扩展方法.它会让它更漂亮,但也会使所有其他IEnumerable的智能感知混乱,所以它可能不值得.
| 归档时间: |
|
| 查看次数: |
1296 次 |
| 最近记录: |