tag:blogger.com,1999:blog-59465307047421309702024-03-06T16:20:07.273+08:00Jax 的工作紀錄除了在整理學習上的經驗,同時也能幫助其他需要的人Jax Huhttp://www.blogger.com/profile/01953021685585893658noreply@blogger.comBlogger2125tag:blogger.com,1999:blog-5946530704742130970.post-84375983848158408672018-04-13T10:59:00.002+08:002023-02-25T21:28:12.255+08:00擴充 LinqToSql 的 Left Join 關連 Table Linq 在處理 Left Join 的語法有點煩人,想採用 EntityRef 的方式進行查詢,而建立 Entity 的關連表的方式很多,但 DBML 都是透過 Visual Studio 的工具去維護的,手動去修改他實在是不優啊!利用 partial class 的方式就可以避開這種問題。<br />
<br />
在 AssociationAttribute 中的 IsForeignKey = false 就會採用 Left Join 進行關連查詢。<br />
<br />
<pre class="cs" name="code">using System.Data.Linq;
using System.Data.Linq.Mapping;
namespace MyConsoleApp.Database
{
public partial class JobCommandMaterial
{
private Link<Material> _Material;
[Association(Storage = "_Material", ThisKey = "MaterialCode", OtherKey = "MaterialCode")]
public Material Material { get { return _Material.Value; } }
}
}
</pre><br />
參考:<br />
<a href="https://msdn.microsoft.com/zh-tw/library/system.componentmodel.dataannotations.associationattribute(v=vs.100).aspx">AssociationAttribute 類別 (System.Data.Linq.Mapping)</a><br />
<a href="https://msdn.microsoft.com/zh-tw/library/bb348960(v=vs.100).aspx">EntityRef(TEntity) 結構 (System.Data.Linq)</a><br />
<a href="https://msdn.microsoft.com/zh-tw/library/bb342490(v=vs.100).aspx">Link(T) 結構 (System.Data.Linq)</a><br />
Jax Huhttp://www.blogger.com/profile/01953021685585893658noreply@blogger.com0tag:blogger.com,1999:blog-5946530704742130970.post-10481349581499215222018-04-11T14:07:00.001+08:002023-02-25T21:28:59.318+08:00LinqToSql 替換查詢的 Table因為封存的 Table 是基於 Base Table 複製出來的,DBML 也不可能一開始就建立這些封存的 Table,但又想用 LinqToSql 去處理資料存取,所以想到用程式去換掉 SQL 裡的 Table Name。<br />
<br />
<pre class="cs" name="code">var query = _dc.CtrlCommandRecord.Where(x => x.CreateDate > DateTime.Today);
DbCommand command = _dc.GetCommand(query);
command.CommandText = command.CommandText.Replace("CtrlCommandRecord", "CtrlCommandRecord_2017");
command.Connection = _dc.Connection;
command.Connection.Open();
DbDataReader reader = command.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
var list = _dc.Translate<CtrlCommandRecord>(reader);
list.Dump();
</pre>Jax Huhttp://www.blogger.com/profile/01953021685585893658noreply@blogger.com0