[英]Using sql queries in EF
我通過以下方式從數據庫獲取數據:
result = (from d in context.FTDocuments
join f in context.FTDocFlags on d.ID equals f.DocID into fgrp
from x in fgrp.DefaultIfEmpty()
where d.LevelID == levelID && x.UserID == userID && d.Status.Equals(DocumentStatus.NEW)
select new Entities.Document
{
ArrivalDate = d.ArrivalDate.Value,
BundleReference = d.BundleRef,
CreatedDate = d.CreatedDate,
CustomerID = d.CustomerID,
DocType = d.DocType.Value,
GuidID = d.DocGuid,
ID = d.ID,
LastExportID = d.LastExpID,
LevelID = d.LevelID,
ProfileID = d.ProfileID,
ScanDate = d.ScanDate.Value,
ScanOperator = d.ScanOperator,
SenderEmail = d.SenderEmail,
Status = d.Status,
VerifyOperator = d.VerOperator,
FlagNo = x == null ? 0 : x.FlagNo,
FlagUserID = x == null ? 0 : x.UserID
}).ToList();
現在,我嘗試通過使用sql查詢來實現這一點:
var test = context.Database.SqlQuery<string>("select *from FTDocument d left outer join FTDocFlag f on d.ID=f.DocID").ToList();
但是出現以下錯誤:
數據讀取器具有多個字段。 多個字段對於EDM原語或枚舉類型無效
是否可以使用上述復雜查詢?
我使用EF 6.0。
您的查詢不返回單個字符串。 使用方式如下:
var test = context.Database.SqlQuery<Entities.Document>("...");
嘗試這個
const string query = @"select *from FTDocument d left outer join FTDocFlag f on d.ID=f.DocID";
var test = context.Database.SqlQuery<Entity>(query).ToList();
在我的回答中,我首先假定了EntitityFramework(ObjectContext) ,但隨后我還添加了DbContext的代碼。
要查看下面的示例,可以使用LinqPad並通過添加連接使用EntitityFramework(ObjectContext)來添加實體框架DLL 。 指定連接屬性並關閉連接對話框。 然后選擇連接並運行示例:
void Main()
{
var context=this; // requires that you selected an EF ObjectContext connection
var q=context.ExecuteStoreQuery<FTDocument>(
"SELECT * FROM FTDocument WHERE ID = @p0", 1);
q.ToList().Dump();
}
它將接受所有類型的SQL查詢,並且您可以使用@p0
, @p1
等參數,並在調用ExecuteStoreQuery
函數時將它們以逗號分隔即可。 結果將作為List<FTDocument>
返回。 要將其轉換為List<string>
您需要指定要返回的數據庫字段-或在每行中創建一個用逗號分隔的字段值列表,例如:
q.Select(s=>s.ID+", "+s.GuidID+", "+s.DocType).ToList().Dump();
相同的示例,但是這次使用EntityFramework(DbContext) :
通過添加連接使用EntitityFramework(DbContext V4 / V5 / V6)添加您的Entity Framework DLL 。 指定連接屬性(不要忘記指定AppConfig文件)並關閉連接對話框。 然后選擇連接並運行示例:
void Main()
{
var context=this; // requires that you selected an EF DBContext (V4/5/6) connection
var q=context.Database.SqlQuery<FTDocument>(
"SELECT * FROM FTDocument WHERE ID = @p0", 1);
q.ToList().Dump();
}
提示:關閉連接對話框之前,請單擊“ 測試” 。 如果您知道連接成功,將在以后減輕您的頭痛。 對於所有想要在具有您自己的數據庫的其他EF項目中進行嘗試的人, 這里有一個快速的教程如何創建它。 然后只需將上面示例中的FTDocument
替換為您選擇的其他表即可(當然,在SQL字符串和方括號<...>
中)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.