Lưu ý rằng _src kế thừa IQueryable<U>
và V kế thừa new()
;C# LINQ Chọn vấn đề trong chuỗi phương pháp
Tôi đã viết câu lệnh sau, không có lỗi cú pháp.
IQueryable<V> a = from s in _src where (s.Right - 1 == s.Left) select new V();
Nhưng nếu tôi đã viết lại nó như sau, các Studio soạn thảo Visual phàn nàn một lỗi trong "Chọn"
IQueryable<V> d = _src.Where(s => s.Right - 1 == s.Left).Select(s=> new V());
Các Lỗi là:
The type arguments cannot be inferred from the usage. Try specifying the type arguments explicitly.
Candidates are:
System.Collections.Generic.IEnumerable<V> Select<U,V>(this System.Collections.Generic.IEnumerable<U>, System.Func<U,V>) (in class Enumerable)
System.Linq.IQueryable<V> Select<U,V>(this System.Linq.IQueryable<U>, System.Linq.Expressions.Expression<System.Func<U,V>>) (in class Queryable)
bất cứ ai có thể giải thích hiện tượng này, và giải pháp nào là sửa lỗi?
=== Sửa (2010/03/16 05:35) ===
Cảm ơn Mike Hai. Tôi cũng đã thử một ví dụ đơn giản như bạn. Nó hoạt động nhưng điều này không làm trong tôi. Tôi đã đăng mã như sau:
public class NSM<U, V> where U : IQueryable<U> where V : new()
{
private U _src;
public NSM(U source) { _src = source; }
public IQueryable<V> LeafNodes
{
get
{
return from s in _src where (s.Right - 1 == s.Left) select new V();
}
}
}
Tôi muốn hàm LeafNodes được viết lại thành phương pháp chuỗi phương pháp LINQ. Bất kỳ ý tưởng?
Cảm ơn tất cả. Tuyên bố tương đương của câu đầu tiên là gì? – Gnought
Mã bạn đã thêm sẽ không biên dịch trừ khi U là thứ có thuộc tính Phải và Trái. Vì vậy, nó không thể chỉ là một 'IQueryable ' trừ khi có một 'nơi U: ILeftRight' hoặc một cái gì đó. –
Tôi đã tìm ra nó nhờ vào mẫu được cập nhật của bạn. Xem câu trả lời được cập nhật bên dưới. Cảm ơn bạn đã cung cấp thêm thông tin. –