[英]SQL Virtual Column in Linq
有沒有一種方法可以使用Razor頁面和實體框架在C#dotnetcore MVC頁面中的linq查詢中創建與SQL虛擬/計算列相當的方法...
SELECT 0 as 'sortField'
FROM
database
WHERE
foo = bar
...但是使用方法語法,格式如下:
Foo = await
(
_context.Foo
.Where(r => !StatusExceptionList.Contains(r.Status))
.Where(r => (Convert.ToDateTime(r.Statusdate) - today).TotalDays < 31)
.Where(r => r.DSRPID == PID)
.OrderBy(r => r.Submitteddate)
.ThenBy(r => r.Statusdate)
.ThenBy(r => r.recordnum)
)
.Union
(
_context.Foo
.Where(r => !DraftStatusExceptionList.Contains(r.Status))
.Where(r => r.DSRPID == PID)
.Where(r => r.csstatus != "not needed" || !String.IsNullOrEmpty(r.csstatus))
.Where(r => !_context.Foo
.Where(rr => rr.DSRPID == PID)
.Select(rr => rr.Fooid)
.Contains(r.Fooid)
)
.OrderBy(r => r.Submitteddate)
.ThenBy(r => r.Statusdate)
.ThenBy(r => r.recordnum)
)
.ToListAsync();
我相信您可以這樣做:
class TableResults
{
public int sortField
}
from t in context.Table select new TableResults { sortField = 0 }
因此,您必須擁有一個名為sortField的類。
您可以在linq中使用如下所示的匿名類型
from result in database
where foo = bar
select new { sortField=0 }
SQL虛擬/計算列的等效項將是readonly屬性。
如果實例將包含用於計算其值的所有必需值,則可以在您的實體類中執行此操作
public class Foo
{
public int Id { get; set; }
public string Name { get; set; }
public int SortValue => Id == 42 ? 0 : Id;
}
_context.Foo.Where(f => somecondition)
.OrderBy(f => f.SortValue)
.ToList();
如果實例沒有用於計算的所有必需值,則可以使用匿名類型
_context.Foo.Where(f => somecondition)
.Select(f => new
{
Id = f.Id,
Name = f.Name,
SortValue = f.Name == "External name" ? 0 : 1
})
.OrderBy(f => f.SortValue)
.ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.