gor*_*mit 2 c# asp.net linq-to-sql
我有这种情况:
if (condition){
var variable = (from el in ....) //linq to sql query
}
else{
var variable = (from el in ....) //linq to sql query
}
// code where i can`t use the variable
Run Code Online (Sandbox Code Playgroud)
我想避免在两种情况下复制代码.
var getHistoryTips = (from el in objDC.tickets
where el.typeOfGame == cANDu[0]
&& el.username == Membership.GetUser(cANDu[1]).ProviderUserKey.ToString()
select new { el.AllGamesTickets, el.WGamesTickets}).FirstOrDefault();
var getHistoryTips = (from el in objDC.tickets
where el.typeOfGame == cANDu[0]
&& el.results != null
&& el.username == Membership.GetUser(cANDu[1]).ProviderUserKey.ToString()
select new { el.AllGamesTickets, el.WGamesTickets}).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
三种选择:
首先,您可以使用"示例" - 键入变量:
// Same anonymous type properties and types as later:
var variable = Enumerable.Repeat(0, new { ... });
if (condition) {
variable = ...;
} else {
variable = ...;
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用条件运算符:
var variable = condition ? ... first query ...
: ... second query ...
Run Code Online (Sandbox Code Playgroud)
第三,您可以使用合成来构建查询.例如,如果唯一的区别是排序,您可以这样做:
var firstPart = ...;
var secondPart = condition ? query.OrderBy(...) : query.OrderByDescending(...);
var query = secondPart.Select(...);
Run Code Online (Sandbox Code Playgroud)
编辑:现在你举了一个例子,我们可以具体化:
string username = membership.GetUser(cANDu[1]).ProviderUserKey.ToString();
var query = objDC.tickets
.Where(el => el.typeOfGame == cANDu[0] &&
el.username == username);
if (condition)
{
query = query.Where(el => el.results != null);
}
var result = query.Select(el => new { el.AllGamesTickets, el.WGamesTickets})
.FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
951 次 |
| 最近记录: |