[英]c# if else then statement with LINQ
我有以下代碼:
if (intval == 0)
{
var result = (from dm in datacontext.Trk
where dm.ID == 0
select dm);
}
else
{
var result = (from dm in datacontext.Trk
where dm.ID != 0
select dm);
}
if (result != null)
{
// do something
}
if (result!= null)
的結果下面有一條斜線,表明名稱結果在當前上下文中不存在。
不確定如何解決此問題。 我最初嘗試var result = null
但是C#不喜歡這樣。
該變量僅限於在其中聲明的塊。因此,您有兩個result
s,一個in if
塊和一個in else
塊,它們是不同的,並且在其塊外不可見。
您需要在塊外定義變量,但是隨后需要具體說明類型,因為C#編譯器需要直接賦值表達式來推斷var
關鍵字的類型。
但是,我建議重新考慮您的代碼,然后執行以下操作:
var result = from dm in datacontext.Trk
where ((intval == 0) ? dm.ID == 0 : dm.ID != 0)
select dm;
if (result.Any())
{
// do something
}
另請注意, result
永遠不會為null
,因此,我相信我已將其替換為Any
但我認為這不是問題的要旨。
您需要在if語句之前聲明result
:
object result = null;
if (intval = 0)
{
result = (from dm in datacontext.Trk
where dm.ID = 0
select dm);
}
else
{
result = (from dm in datacontext.Trk
where dm.ID != 0
select dm);
}
if (result != null)
{
// do something
}
或者,您可以將var聲明保留在另一個變體中:
var result = (from dm in datacontext.Trk
where dm.ID != 0
select dm);
if (intval = 0)
{
result = (from dm in datacontext.Trk
where dm.ID = 0
select dm);
}
if (result != null)
{
// do something
}
現在,您應該以某種方式找到一種方法來更改if
或將其完全刪除,因為在那個時候result
不能為null
。
這樣的事情怎么樣:
var result =
intval == 0
?(from dm in datacontext.Trk where dm.ID = 0 select dm)
:(from dm in datacontext.Trk where dm.ID != 0 select dm);
if(results.Any())
{
...
}
您可以與主查詢分開執行where:
var result = from dm in datacontext.Trk select dm;
if (intval == 0)
{
result = result.Where(dm => dm.ID == 0);
}
else
{
result = result.Where(dm => dm.ID != 0);
}
if (result.Any())
{
// do something
}
您需要在第一個if-else之前聲明結果變量。
另外,您還需要在第二個if語句中圍繞條件進行套疊。
此代碼也將導致問題:
if (value == 0)
{
int result = 1;
}
else
{
string result = "testing";
}
if (result != 1)
{
// do something
}
第一次結果是一個int
,第二次是我聲明一個string
,而第三次是未聲明的result
。 它們可以具有不同類型的原因是因為前兩個聲明屬於不同的作用域。 每個{ ... }
都有自己的范圍。
如果要在范圍之間共享一個變量,則需要在外部聲明它。 但是現在,由於在所有三個地方都使用了相同的變量,因此存在類型不匹配的編譯器錯誤:
int result;
if (value == 0)
{
result = 1;
}
else
{
result = "testing"; // type error here
}
if (result != 1)
{
// do something
}
List<TypeOfDm> dmList; // <=== Declare dmList outside of block statements.
if (intval == 0) { // <=== Use "==" for comparision, "=" is assignement.
dmList = datacontext.Trk
.Where(dm => dm.ID == 0)
.ToList();
} else {
dmList = datacontext.Trk
.Where(dm => dm.ID != 0)
.ToList();
}
if (dmList.Count != 0) {
// do something
}
注意,使用您的代碼,結果將始終為非空。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.