顯示具有 LinQ 標籤的文章。 顯示所有文章
顯示具有 LinQ 標籤的文章。 顯示所有文章

2012年5月21日 星期一

Linq Xml 寫入

有讀取 當然就有寫入
所以記錄一下寫入
XmlString = XElement.Load(xmlFile);
XElement  xmlLinq = (from a in XmlString.Elements(Elements1)
                          select a).Single();
        xmlLinq.Value = value;
        XmlString.Save(XmlFile);


2011年5月10日 星期二

linq join 多個條件

在linq 要join 多個條件
可以用

from a in Table1
join b in Table2 on new { a.a1,a.a2} equals new { b.a1,b.a2}

這是一般的狀況下

但是遇到
LEFT JOIN
就會發生錯誤
LEFT JOIN 就要用另一種方法才能解決

from a in Table1
join b in Table2 on a.a1 equals b.a1 into PutA
from ax in PutA.Where(a => a.a2 == b.a2).DefaultIfEmpty()

他必須將另一個條件在FROM時候下WHERE來執行
這樣就可以在LEFT JOIN 狀況下 下多條件的JOIN方法

2011年1月25日 星期二

Linq Xml 簡單搜尋

Xml搜尋
最主要就是 Elements 是欄位名稱 ex: <Element>
Attributes 是欄位設定值  ex: <Element Attribute='123'>
Value 是裡面的值 ex: <Element>Value</Element>

XElement XmlString;
var xmlLinq = (from a in XmlString.Elements("SetElement").Attributes("id")
select a.Value).ToList();

Linq Left join

原來自己弄那麼久的left join
結果都沒寫上來
記錄一下 XD


from a in Table1
join b in Table2 on a.id equals b.id into b2
from b22 in b2.DefaultIfEmpty()
select b22

2010年11月21日 星期日

C# Linq Pivot 樞紐

由於要做分析
所以有用到這東西
所以紀錄一下
Linq 用法


var LinqDataSource = from a in Linq.Mains
group a by a.date.Date into b
orderby b.Key
select new
{
Date = b.Key,
Total = b.Count(),
Project1 = b.Where(x => x.ProjectNo == 1).Count(),
Project3 = b.Where(x => x.ProjectNo == 3).Count(),
Project5 = b.Where(x => x.ProjectNo == 5).Count(),
Project7 = b.Where(x => x.ProjectNo == 7).Count(),
Project9 = b.Where(x => x.ProjectNo == 9).Count(),
};


不過麻煩的是
要先知道他欄位
但是像我想要直接用CODE抓欄位的就........
還在找動態方式...
先紀錄一下!!!

2010年10月19日 星期二

C# Linq to Sql 寫T-Sql語法

雖然Linq很強大
但是有些特殊部份無法使用 T_T
所以還是要回歸到最基礎的SQL語法來寫
以下就是寫法

using (LinqDataContext db = new LinqDataContext(Context))
{
db.Log = Console.Out;
var q = db.ExecuteQuery <Class>(@"EXEC synonyms N'select * from [user]'"); //雙引號內為T-SQL語法
}


像我語法內主要是用在Synonyms用在Linked Servers上
因為查了一下 找不到怎樣在Linq上做Linked Server的查詢法
又在不能增加Stored Procedures的狀況下
所以就只好直接用T-Sql語法直接硬上!!! XDDD

2010年10月17日 星期日

C# Linq Stored Procedures uniqueidentifier output

當Stored Procedures有時候會可以不需要輸入值
會自己產生
但又有欄位時候 宣告成uniqueidentifier output 型態
這時候Linq 呼叫要怎樣解決勒!!!!


System.Guid? id = System.Guid.Empty;
Linq.Insert("test", "123456", ref id);

他的型態是System.Guid? 所以宣告一個空值給他
然後 給值時候需多加上ref型態 這樣就可以搞定囉!!!!

2010年10月11日 星期一

Linq 使用多執行緒 Parallel

剛剛發現Linq有支援Parallel
看了就很HIGH的想要用看看
結果!!!
不適用在SQL上 叭叭 XDDDD

但是本機端的就可以拿來用

還有一個重點是
Parallel後存入Array後 順序會大亂
因為做完就存入的關係
所以 這部份要注意!!!

如果要排列整齊
請用

int[] data = new int[] { 0, 1, 2, 3 };
int[] data2 = (from x in data.AsParallel(QueryOptions.PreserveOrdering)
select x * 2).ToArray();

這樣會排列過後
但是Loading會變重
所以就自己取捨怎樣做才是正確的囉!!!!

參考網站

2010年9月14日 星期二

Linq To Entity Framework (Store Proceduce篇)

再看完前兩篇文章
就會想說
那 Entity Framework勒
應該也可以呼叫Store Proceduce吧
對囉
當然可以
只是
麻煩了一個步驟 XD

首先一樣先引入Store Proceduce進來
然後勒
要在他的地方點右鍵 選 Add Function Import
這樣他才能被呼叫出來
然後設定輸出要啥類型的 之類的東西
就可以正常呼叫囉

entity1.GetUserLevel("", "");

Linq To Sql 呼叫 Store Procedure

那天就在研究Store Procedure的東西
發現Linq To Sql 可以直接拉進來用欸
太優了 >/////<

方法一樣
開啟Linq To Sql後
將Store Procedure拉進來
一放
就可以呼叫囉 A_A

var data2 = from a in linq.SelectItemLevel(934) //SelectItemLevel是procedure 934是值
select a;

C# Linq To Entity Framework

最近因為Linq To Sql 要倒了
所以在找 Linq To Entity Framework的方法
結果 哈哈哈 差不多東西阿 換湯不換藥
使用起來還是很簡單的說 XD

只是一開始是做Linq To Sql 變成做Entity Data Model
呼叫方式變成

LinqDataContext linqDB = new LinqDataContext();
Entities1 entity1 = new Entities1();

接下來就都一樣囉 >_^

2010年8月2日 星期一

Linq LinqDataSource 改成自己語法

有時候裡面的搜尋並不是自己想要的
所以就想要有沒有辦法改
就找到官網有這方法 紀錄一下


protected void LinqDataSource_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
var cities = from city in citiesArray
where city.CompareTo("B") > 0
select city;
e.Result = cities;
// Or we could set e.Result = citiesArray to return all rows.
}



連結官網

2010年7月21日 星期三

Linq Insert SQL 指令篇

之前有用到
但打算拿掉了 XDD
先記錄下來


LinqClassesDataContext linqdc = new LinqDataClassesDataContext();
Order ord = new Order
{
No = ComputeNo(),
PersonID = PersonID,
ProjectNo = ProjectNo,
Reason = Reason,
Date = DateTime.Today
};
linqdc.GetTable<Order>().InsertOnSubmit(ord);
linqdc.SubmitChanges();


[Table(Name = "dbo.OrderMain")]
public class Order //新增
{
[Column(IsPrimaryKey = true)]
public string OrderNo { get; set; }
[Column]
public string PersonID { get; set; }
[Column]
public int ProjectNo { get; set; }
[Column]
public string Reason { get; set; }
[Column]
public DateTime Date { get; set; }
}


對了 前面記得加上
using System.Data.Linq;
using System.Data.Linq.Mapping;

如果是自己產生的欄位加入IsDbGenerated=true

2010年7月15日 星期四

Linq 使用Split分割ROW

有了條件 我將值通通丟同個DB內的一個欄位內
結果我有設定 ^ 這個標誌分隔
然後現在想要讀出來!!!
嘿嘿
Linq可以直接使用Split功能

var main = from a in LinqDC.Mains.AsEnumerable()
from sp in a.Reason.Split('^')
select new { id = a.No, Reason = sp };


這樣就能將一個ROW的資訊變成多個ROW欄位了

Linq Select 字串 合併

假設A表有ID 跟 NAME
B表有ID 跟 TEL
顯示表格要顯示
ID NAME TEL
但一個人可能有好幾支電話

因為不太想用Gridview的合併欄位方式去合併
但是表格Join後就會有重複的欄位
所以就用LINQ直接將TEL部分合併 A_A
這樣就可以一個欄位 通通搞定

看CODE吧

var test = from a in dctest.NameTable
join b in dctest.TelTable on a.id equals b.id into bbb
select new { id = a.id,name=a.name, tel = string.Join("\n", (from qq in bbb select qq.tel).ToArray()) };


合併了!!!

2010年7月11日 星期日

Linq 不同DB Join 表格

A_A
原來LinQ可以直接將不同DB表格Join起來
太優了

不囉唆 看CODE吧

var ErrorOrder =from a in Linq1.Mains.AsEnumerable()
join b in Linq2.Person.AsEnumerable() on a.ID equals b.ID
select new { ID = a.ID, name = b.Name };


Linq1~Linq2是不同DB的DataClasses只要在後面多加上AsEnumerable()
就可以達到合併功能
讚吧 >_^

2010年6月8日 星期二

C# DataTable 左右合併 To LinQ

呵
一般DataTable合併就只是上下合併
但像我又想要讓他左右合併
我又不想寫For迴圈讓他跑
所以 哈哈哈 我就用了LinQ 讓他們緊緊結合在一起了

private DataTable LinqMerge(DataTable DataTable1, DataTable DataTable2)
{
DataTable LinqdataTable = new DataTable();
try
{
var linqMerge =
from DataRow a in DataTable1.Rows
join DataRow b in DataTable2.Rows on a.Field("Order") equals b.Field("Order")
orderby a.Field("Order")
select new { IP1 = a.Field("IP"), Set1 = a.Field("Set"), IP2 = b.Field("IP"), Set2 = b.Field("Set") };

LinqdataTable = LinqQueryToDataTable(linqMerge);
return LinqdataTable;
}
catch
{
return LinqdataTable;
}
}

這是利用他們排序後的IP值 合併的
用這方法前提是 他們有共通的Columns可以合併
像我範例就是Order欄位

然後他們就緊緊合在一起了
如果沒共通的Columns就...生出來吧
不然你怎樣讓他左右合併呢
你說是吧

C# LinQ Update To SQL

更新 SQL方法

LinQDataClassesDataContext context = new LinQDataClassesDataContext(); //LinQToSql
var existingCust = (from a in context.IpTable where a.IP == IP select a).First(); //讀出要更新的表的值出來
existingCust.Ip = IP; //將新值IP變數丟進去
context.SubmitChanges(); //更新資料庫


如果要多個就existingCust.Ip = IP; 多幾欄 有啥屬性就丟啥
YA!! 就醬!!!

2010年6月7日 星期一

C# LinQ IP排序

哈哈
之前分享 SQL IP排序方法
可是勒
最近我的心都飄到LinQ上 怎可能不Try It勒
呵

但是勒
哈哈哈
我試不出來 Orz...
我將IP切開後 OrderBy後 LinQ轉SQL語法時候 他說不支援 囧
我也不知道怎辦 XDDDD

所以
我就用折衷方式
先將表讀出來後 存到DataTable裡後
再排序一次 就好了


var Iplinq =
from a in context.IpTable
where a.IP.Contains(IPblock)
select new { IP = a.IP, IsServer = a.IsServer }; //讀出SQL表格

IpTable = LinqQueryToDataTable(Iplinq); //轉DataTable
var orderbyIP =
from DataRow a in IpTable.Rows
let b = a.Field("IP").Split('.') //切開IP
let ipblock1 = b.GetValue(0)
let ipblock2 = b.GetValue(1)
let ipblock3 = b.GetValue(2)
let ipblock4 = b.GetValue(3)
orderby Convert.ToInt32(ipblock1), Convert.ToInt32(ipblock2), Convert.ToInt32(ipblock3), Convert.ToInt32(ipblock4) //轉成數值在個別排序
select a;

語法一樣 就是 LinQToSql時候出問題 導致不能排序
如果直接丟上上面的SQL那部份就會有錯
應該是......就是有問題吧 XD
如果各位大大有辦法解決 請幫我解答一下 感恩

C# LinQ Like

LinQ 怎樣做到 SQL 語法的Like勒

where a.IP.Contains(IPblock)


就醬
Contains <==LIKE