gpt4 book ai didi

linq - LINQ to SQL 中的堆栈溢出和 Contains 关键字

转载 作者:行者123 更新时间:2023-12-04 17:14:09 25 4
gpt4 key购买 nike

我有一个扩展方法,它应该根据一组 Id 过滤一个可查询对象(IQueryable)....

请注意,IQueryable 是通过 LinqToSql 请求从我的数据库中获取的

 public static IQueryable<NewsItemSummary> WithID(this IQueryable<NewsItemSummary> qry, IQueryable<Guid> Ids)
{
return from newsItemSummary in qry
where Ids.Contains(newsItemSummary.ID)
select newsItemSummary;
}

身份证 从数组或列表创建并作为可查询列表传入,它不工作

例如...
 GetNewsItemSummary().WithID(ids.AsQueryable<Guid>())

身份证 由 LinqToSql 请求组成,它确实有效!!

这是已知问题:
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=355026

我的 Ids 集合不能来自 LinqToSql 请求...

请注意,如果我更改函数以使其使用 IList 而不是 IQueryable ....
 public static IQueryable<NewsItemSummary> WithID(this IQueryable<NewsItemSummary> qry, IList<Guid> Ids)
{
return from newsItemSummary in qry
where Ids.Contains(newsItemSummary.ID)
select newsItemSummary;
}

我现在得到以下异常:
Method 'Boolean Contains(System.Guid)' has no supported translation to SQL.

所以...我想要做的就是根据 Guid 列表或数组过滤我的新闻集合.... 想法???

最佳答案

这将翻译。

public static IQueryable<NewsItemSummary> WithID(
this IQueryable<NewsItemSummary> qry,
List<Guid> Ids
)
{
return from newsItemSummary in qry
where Ids.Contains(newsItemSummary.ID)
select newsItemSummary;
}
)

针对本地集合翻译包含方法是 .net 3.5 的 linq 到 sql 开发中添加的最后一个功能之一,因此在某些情况下您会期望没有的工作 - 例如 IList<T> 的翻译.

另外,请注意,虽然 LinqToSql 很乐意翻译包含大量项目的列表(我已经看到它可以处理超过 50,000 个元素),但 SQL Server 只接受 2,100 个参数用于单个查询。

关于linq - LINQ to SQL 中的堆栈溢出和 Contains 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/961912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com