我理解C#关键字var在编译时隐含类型,因此需要在同一位置声明和赋值,使以下构造非法:
var something;
if (condition)
{
something=1;
}
else
{
something = 0;
}
Run Code Online (Sandbox Code Playgroud)
尽管C#编译器可以主要确定当前作用域中的所有赋值都是相同的类型,但它(当前)却没有,因此会生成编译时错误.
在将LIN与LINQ一起使用时,我有时希望根据程序条件略微不同地初始化我的结果变量.我发现的方法是使用?:运算符,如:
var participants = (email == null ?
(from part in db.Participant
where part.SequenceNumber == seqNr
select part)
:
(from part in db.Participant
where part.EmailAddress == email
select part));
Run Code Online (Sandbox Code Playgroud)
如果我只有两个可能的任务,那就足够了,但如果有多个可能的任务,很快就会变得笨拙.
有更优雅的方法吗?
您可以使用.Where(...)
而不是查询语法:
var participants = email == null
? db.Participant.Where(p => p.SequenceNumber == seqNr)
: db.Participant.Where(p => p.EmailAddress == email);
Run Code Online (Sandbox Code Playgroud)
但就我个人而言,我根本就不会var
在这里使用它 - 它不会超过2,但这是一个经典的"搜索"模式.我可能会用:
IQueryable<Part> query = db.Participant;
if(email != null) query = query.Where(p => p.EmailAddress == email);
if(seqNr != null) query = query.Where(p => p.SequenceNumber == seqNr);
...
// consume query
Run Code Online (Sandbox Code Playgroud)
这允许组合多个条件(在这种情况下为"AND")以用于更具体的查询.你也可以做"或",但它稍微复杂一点(除非你使用Concat
/ Union
,这是凌乱的).
归档时间: |
|
查看次数: |
2957 次 |
最近记录: |