2008-11-25 28 views
8

Vì một số lý do mã của tôi không hoạt động.Lỗi LINQtoSQL: Các toán tử trình tự không được hỗ trợ cho loại 'System.String'

from tan in TANS 
    where tan.ID.ToString().Count() != 1 
    select tan 

Tôi muốn chọn tất cả ID trùng lặp trong bảng nên tôi đang sử dụng số đếm! = 1 và tôi gặp phải lỗi này.

NotSupportedException: Trình xử lý chuỗi không được hỗ trợ cho loại 'System.String'

Trợ giúp xin vui lòng?

Trả lời

13

tan.ID.ToString() là một chuỗi chứ không phải bộ sưu tập để bạn không thể áp dụng Count().

Tôi tin rằng bạn muốn một cái gì đó như: (Cú pháp này là sai, nhưng gần)

from tan in TANS 
group tan by tan.ID into dups 
where dups.Count() > 1 
select dups.Key; 

Update (sau 5 năm trừ đi 5 ngày): (Đó là một chút lạ cho Google một vấn đề và tìm ra câu trả lời BẠN đã viết ..) Tại cốt lõi của vấn đề này là câu lệnh LINQ đang cố gắng xây dựng một câu lệnh SQL, và cơ sở dữ liệu không biết cách áp dụng Count() cho một chuỗi. Tuy nhiên, nếu bạn sử dụng LINQ đối với một bộ sưu tập trong bộ nhớ, thì nó sẽ coi chuỗi là một IEnumerable và Count() sẽ hoạt động tốt.

5

Câu trả lời của James gần với những gì tôi nghĩ bạn đang muốn, nếu bạn chỉ muốn giá trị của bản thân ID đi cùng với mình. Nếu bạn muốn đối tượng ID được gán để thử điều này.

var dupes = (from tan in TANS 
      group tan by tan.ID.ToString() into duplicates 
      where duplicates.Count() > 1 
      select duplicates.Select(d => d)).SelectMany(d => d); 

Không phải cách tốt nhất để làm điều đó trong LINQ Tôi chắc chắn. Nếu tôi nghĩ ra một cách sạch hơn, tôi sẽ chỉnh sửa nó ở đây. SelectMany đó quan trọng vì nó làm phẳng danh sách các đối tượng từ IGrouping.

Các vấn đề liên quan