Cách thực hiện Chọn Tất cả (*) trong linq sang sql


83

Làm thế nào để bạn chọn tất cả các hàng khi thực hiện linq sang sql?

Select * From TableA

Trong cả cú pháp truy vấn và cú pháp phương thức xin vui lòng.

Câu trả lời:


103
from row in TableA select row

Hoặc chỉ:

TableA

Trong cú pháp phương thức, với các toán tử khác:

TableA.Where(row => row.IsInteresting) // no .Select(), returns the whole row.

Về cơ bản, bạn đã chọn tất cả các cột, việc chọn sau đó sẽ chuyển đổi cột đó thành các cột bạn quan tâm, vì vậy bạn thậm chí có thể làm những việc như:

from user in Users select user.LastName+", "+user.FirstName

Một cái khác mà tôi thích làm là .Take (int) để kéo tất cả các cột cho một số bản ghi nhất định. Chẳng hạn như TableA.Take (100)
brian s

Bạn có thể vui lòng giải thích lý do tại sao bạn không cần phải sử dụng một cách rõ ràng from row in TableA.Rows? Có phải vì Rowslà thuộc tính mặc định không? Đó là một tính năng của LINQ, hay một thứ gì đó được nướng ở nơi khác? Chỉ tò mò.
rory.ap

@roryap phụ thuộc vào thư viện truy cập DB của bạn, ở đây tôi giả sử LINQ to SQL, trong đó bảng là các hàng, ADO hoặc bất kỳ thứ gì có thể khác.
Simon Buchan

69

Bạn muốn chọn tất cả các hàng hay tất cả các cột?

Dù bằng cách nào, bạn thực sự không cần phải làm gì cả.

DataContext có một thuộc tính cho mỗi bảng; bạn chỉ cần sử dụng thuộc tính đó để truy cập toàn bộ bảng.

Ví dụ:

foreach(var line in context.Orders) {
    //Do something
}

1
Tôi thứ hai câu hỏi đó. Đây là một câu trả lời hữu ích hơn nhiều so với câu đã chọn vì nó đơn giản hơn và trả lời trực tiếp hơn câu hỏi của OP.
tandrewnichols

2
Câu trả lời này xứng đáng là câu trả lời hàng đầu. Hãy sửa chữa :) này
d.popov

Có thể một ngày nào đó nó đã bị phản đối, bởi vì câu trả lời này cũng không phải là "phổ quát", mặc dù nó thỏa mãn OP. Đối với tôi, khi sử dụng nó với EF, allOrders là DBSet chứ không phải IEnumerable, vì vậy tôi không thể allOrders.Where () ngay sau đó. Có lẽ tôi chỉ đang sử dụng nó sai cách hoặc bỏ sót điều gì đó, nhưng việc thêm một .Skip (0) đã tạo nên điều kỳ diệu cho tôi.
Charles Roberto Canato

24
using (MyDataContext dc = new MyDataContext())
{
    var rows = from myRow in dc.MyTable
               select myRow;
}

HOẶC LÀ

using (MyDataContext dc = new MyDataContext())
{
    var rows = dc.MyTable.Select(row => row);
}

6
Đừng làm một trong hai điều này. Thay vào đó, hãy viết đơn giản var rows = dc.MyTable.
SLaks

2
anh ấy đã yêu cầu cú pháp truy vấn và cú pháp phương thức để tôi đưa cho anh ấy.
Simon Fox

3
Đừng đưa cho anh ta những gì anh ta yêu cầu; cung cấp cho anh ta những gì anh ta cần. Rõ ràng là anh ta không hiểu lắm về LINQ-to-SQL.
SLaks

Không, tôi chưa hiểu lắm về LINQ-to-SQL. Không có thời gian để đọc sách về nó, nhưng chỉ khi nào tôi cần thông tin thì tôi bắt đầu tìm kiếm xung quanh. Thêm vào đó, tôi đang đợi cho đến khi Enity hoạt động tốt hơn. Vì tôi muốn tìm hiểu điều đó vì nó có thể sử dụng tất cả các cơ sở dữ liệu.
chobo2

2
Đủ công bằng, tuy nhiên không có gì sai với một trong hai giải pháp tôi đã cung cấp. Chúng cung cấp cho bạn cơ sở tốt để bắt đầu xây dựng truy vấn có độ phức tạp cao hơn.
Simon Fox

4

bạn muốn chọn tất cả dữ liệu từ cơ sở dữ liệu thì bạn có thể thử điều này: -

dbclassDataContext dc= new dbclassDataContext()
List<tableName> ObjectName= dc.tableName.ToList();

nếu không Bạn có thể thử điều này: -

var Registration = from reg in dcdc.GetTable<registration>() select reg;

và phương thức Syntex: -

 var Registration = dc.registration.Select(reg => reg); 

2
Dim q = From c In TableA
Select c.TableA

ObjectDumper.Write(q)

1

Bạn có thể sử dụng truy vấn linq đơn giản như sau để chọn tất cả các bản ghi từ bảng sql

var qry = ent.tableName.Select (x => x) .ToList ();


1

Giả sử TableAlà một thực thể của bảng TableATableADBEntitiesdưới dạng lớp Thực thể DB,

  1. Phương pháp LINQ
IQueryable<TableA> result;
using (var context = new TableADBEntities())
{
   result = context.TableA.Select(s => s);
}
  1. Truy vấn LINQ-to-SQL
IQueryable<TableA> result;
using (var context = new TableADBEntities())
{
   var qry = from s in context.TableA
               select s;
   result = qry.Select(s => s);
}

SQL gốc cũng có thể được sử dụng như:

  1. SQL gốc
IList<TableA> resultList;
using (var context = new TableADBEntities())
{
   resultList = context.TableA.SqlQuery("Select * from dbo.TableA").ToList();
}

Lưu ý: dbolà chủ sở hữu lược đồ mặc định trong SQL Server. Người ta có thể xây dựng một SELECTtruy vấn SQL theo cơ sở dữ liệu trong ngữ cảnh.


0

Tại sao bạn không sử dụng

DbTestDataContext obj = new DbTestDataContext();
var q =from a in obj.GetTable<TableName>() select a;

Cái này đơn giản.


0

Tôi thường cần truy xuất 'tất cả' các cột, ngoại trừ một vài. vì vậy Chọn (x => x) không hoạt động đối với tôi.

Trình chỉnh sửa của LINQPad có thể tự động mở rộng * sang tất cả các cột.

nhập mô tả hình ảnh ở đây

sau khi chọn '* tất cả', LINQPad mở rộng *, sau đó tôi có thể xóa các cột không cần thiết.

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.