# LINQ

資料來源: 一個結合where、group、orderby的linq(<http://yangxinde.pixnet.net/blog/post/31357272-%E4%B8%80%E5%80%8B%E7%B5%90%E5%90%88where%E3%80%81group%E3%80%81orderby%E7%9A%84linq>)

保哥線上講堂：LINQ 快速上手(<https://www.slideshare.net/WillHuangTW/linq-46081487>)

ASP.NET MVC-LINQ 之 insert update select(<https://dotblogs.com.tw/newmonkey48/2013/09/16/118726>)

```
List<Object> arr= new List<Object>();

using (DataBaseDataContext db = new DataBaseDataContext())
{
    //where  like 
    arrR = (from o in db.table
            where o.field.Contains("text")
    //group
    /*where o.field== "text"
    group o.field1 new Obj (){
            Attribute1 = o.field1,
            Attribute2 = o.field2,
            Attribute3 = o.field3
    } into g
    //orderby g.Key.field1
    select g.Key).ToList();*/
    select o).ToList();
}
```

### Select

第一種方法如上

第二種方法

```
var result = (from p in db.table
                select p);
if(true)
        result = query.Where(o=>o.p.ID == 1);

var entity = query.select(o=>o.p.ID).FirstOrDefault();
```

想要串接多個條件

```
List<Object> arr= new List<Object>();

using (DataBaseDataContext db = new DataBaseDataContext())
{ 
    arrR = (from o in db.table
            where o.field.Contains("text") && o.field2 = false

    select o).ToList();
}
```

### Insert

```
table row = new table();
row.ID = 1;
row.Name = "Brian";
db.table.Add(row);
db.SaveChanges();
```

### Update

select出來之後，直接對值做修改，再儲存起來。

```
var query = (from o in db.table
                where o.id = "abc123"
                select o).FirstOrDefault();
query.name = "Brian"; //修改姓名
db.SaveChanges();
```

### Delete

### Join

在Join時，on的比較只能用 **\[equals]** 不能用 **\[==]**

```
var query = (from o in db.table
                join b in db.table2 on a.ID equals b.ID
                select new{a})
```

### 題外話

LINQ 不只能查詢SQL，還可以查詢清單、陣列 等等。

### WHERE

假如我們想要取得清單中的某個物件，可利用下列方式。

```
List<Class1> ls = Class1.getList();
string str = "Brian";
Class1 obj = ls.Where(o=>o.Name == str).FirstOrDefault();
```

### order by

.OrderByDescending(o=>o.SN)

### 取幾筆

.Take(count)

## 整數清單 轉 字串清單

```
List<int> to List<string>


.select(o=>o.toString()).toList()
```
