我試圖找到一個類似的問題,但我還沒有找到我想要的。我有這個問題:關于以下代碼,我無法找到一種方法來管理如果devTab為 null 那么他的財產ID不可用并且where條件t.IDDevTab ==devTab.ID導致null reference error. 請注意 t.IDDevTab 在資料庫中不可為空。我試圖向 插入一些額外的條件,Where但它導致了錯誤:invoke non static method requires a target。如果“devTab”為空,我將在“DeviceTabColumnsNameAndDesc”中獲得一個空串列!
DeviceTable devTab = (from t in _db.DeviceTables
where t.DeviceType == devtype && t.IDPlant == id
select t)
.FirstOrDefault();
var DeviceTabColumnsNameAndDesc = (from t in _db.DeviceTabCols
where t.IDDevTab == devTab.ID
&& t.MeasureFamily != "KEY"
&& t.MeasureFamily != "DATETIME"
select new
{
colName = t.ColumnName,
colDescr = t.ColumnDescr
})
.ToList();
是否有解決此問題的方法?先感謝您。
uj5u.com熱心網友回復:
因此,如果 devTab 為 null,您需要一個新的匿名型別的空串列.. 尷尬,但可行:
DeviceTable devTab = (from t in _db.DeviceTables
where t.DeviceType == devtype && t.IDPlant == id
select t)
.FirstOrDefault();
var DeviceTabColumnsNameAndDesc = devTab == null ?
Enumerable.Empty<object>().Select(x => new { colName = "", colDescr = "" }).ToList() :
(
from t in _db.DeviceTabCols
where t.IDDevTab == devTab.ID && t.MeasureFamily != "KEY" && t.MeasureFamily != "DATETIME"
select new {
colName = t.ColumnName,
colDescr = t.ColumnDescr
}
).ToList();
如果你想在這種情況下從匿名型別切換,你可以看看 ValueTuple:
var DeviceTabColumnsNameAndDesc = devTab == null ?
new List<(string colName, string colDesc)>() :
(
from t in _db.DeviceTabCols
where t.IDDevTab == devTab.ID && t.MeasureFamily != "KEY" && t.MeasureFamily != "DATETIME"
select (
colName: t.ColumnName,
colDescr: t.ColumnDescr
)
).ToList();
或者做一個記錄,它就像一個類,但有一些額外的位使它作為資料持有者有用:
//defined in a namespace
public record ColThing(string ColName, string ColDesc);
var DeviceTabColumnsNameAndDesc = devTab == null ?
new List<ColThing>() :
(
from t in _db.DeviceTabCols
where t.IDDevTab == devTab.ID && t.MeasureFamily != "KEY" && t.MeasureFamily != "DATETIME"
select new ColThing(t.ColumnName, t.ColumnDescr)
).ToList();
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/360040.html
標籤:C# sql-server 林克 例外 asp.net-mvc-3
上一篇:Asp.Net.Net5LambdaLINQ獲取特定角色的用戶數
下一篇:用LINQ查詢替換SQL查詢
