首页 / C# / c# – LINQ和参考列表问题
c# – LINQ和参考列表问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – LINQ和参考列表问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2801字,纯文字阅读大概需要5分钟。
内容图文
![c# – LINQ和参考列表问题](/upload/InfoBanner/zyjiaocheng/791/9285329089904b45a1a093956a632633.jpg)
我有以下代码与LINQ
var q = (from web in DataContext.Webs select web);
List<int?> k1 = new List<int?>() { 1, 2 };
List<int?> k2=new List<int?>() { 16, 17 };
q = q.Where(web => DataContext.WebTechMaps.Any(t => t.WebsiteId == web.WebsiteId && k1.Contains(t.TechId)));
System.Diagnostics.Debug.WriteLine(q.Count());
k1 = k2;
q = q.Where(web => DataContext.WebTechMaps.Any(t => t.WebsiteId == web.WebsiteId && k1.Contains(t.TechId)));
System.Diagnostics.Debug.WriteLine(q.Count());
这是它生成的查询.
第一次执行计数.
SELECT COUNT(*) AS [value]
FROM [dbo].[Web] AS [t0]
WHERE EXISTS(
SELECT NULL AS [EMPTY]
FROM [dbo].[WebTechMap] AS [t1]
WHERE ([t1].[WebsiteId] = ([t0].[WebsiteId])) AND ([t1].[TechId] IN (@p0, @p1))
)
-- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [1]
-- @p1: Input Int (Size = -1; Prec = 0; Scale = 0) [2]
第二次执行计数功能
SELECT COUNT(*) AS [value]
FROM [dbo].[Web] AS [t0]
WHERE (EXISTS(
SELECT NULL AS [EMPTY]
FROM [dbo].[WebTechMap] AS [t1]
WHERE ([t1].[WebsiteId] = ([t0].[WebsiteId])) AND ([t1].[TechId] IN (@p0, @p1))
)) AND (EXISTS(
SELECT NULL AS [EMPTY]
FROM [dbo].[WebTechMap] AS [t2]
WHERE ([t2].[WebsiteId] = ([t0].[WebsiteId])) AND ([t2].[TechId] IN (@p2, @p3))
))
-- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [16]
-- @p1: Input Int (Size = -1; Prec = 0; Scale = 0) [17]
-- @p2: Input Int (Size = -1; Prec = 0; Scale = 0) [16]
-- @p3: Input Int (Size = -1; Prec = 0; Scale = 0) [17]
请查看传递给查询的参数.
似乎它使用两个表达式的新引用对象.
不知怎的,@ p0和@ p1改变了他们的旧值.
我明白问题是在Linq它使用新的引用对象.
-- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [1]
-- @p1: Input Int (Size = -1; Prec = 0; Scale = 0) [2]
-- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [16]
-- @p1: Input Int (Size = -1; Prec = 0; Scale = 0) [17]
-- @p2: Input Int (Size = -1; Prec = 0; Scale = 0) [16]
-- @p3: Input Int (Size = -1; Prec = 0; Scale = 0) [17]
有人可以解释如何使用List对象的相同名称,但使用正确的List保持查询
期望的输出是
-- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [1]
-- @p1: Input Int (Size = -1; Prec = 0; Scale = 0) [2]
-- @p2: Input Int (Size = -1; Prec = 0; Scale = 0) [16]
-- @p3: Input Int (Size = -1; Prec = 0; Scale = 0) [17]
提前致谢
解决方法:
您的第一个查询表达式使用k1.它使用变量kl,这就是捕获的内容.当您更改k1的值时,这实际上会更改查询的含义.如果您不希望更改查询的含义,请不要更改捕获的变量!只需在第二个过滤器中使用k2:
var q = (from web in DataContext.Webs select web);
List<int?> k1 = new List<int?>() { 1, 2 };
List<int?> k2=new List<int?>() { 16, 17 };
q = q.Where(web => DataContext.WebTechMaps
.Any(t => t.WebsiteId == web.WebsiteId &&
k1.Contains(t.TechId)));
System.Diagnostics.Debug.WriteLine(q.Count());
q = q.Where(web => DataContext.WebTechMaps
.Any(t => t.WebsiteId == web.WebsiteId &&
k2.Contains(t.TechId)));
System.Diagnostics.Debug.WriteLine(q.Count());
内容总结
以上是互联网集市为您收集整理的c# – LINQ和参考列表问题全部内容,希望文章能够帮你解决c# – LINQ和参考列表问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。