【发布时间】:2014-02-12 19:06:57
【问题描述】:
我正在做一个 Linq 查询来连接两个表中的数据(使用 Linq to SQL),逻辑如下:
- 横幅包含一个包含逗号分隔值的字段。我想拆分此列并拥有一个 ID 列表(例如 1、2、3、4)
- References 包含这些映射的列表,其中横幅中的 ID 与参考表中的 ID 之间的映射为 1:1
- 表合并后,我想返回引用表中的描述,即 ID 的文本表示。
我一直在摆弄这个,但碰上了一堵砖墙。下面是我正在使用的代码(在 LinqPad 中):
var results = (from b in Banners
where b.BannerCode == "1234"
from a in b.VesselBoatAreaY.Split (',').AsEnumerable()
join r in References on a equals r.ReferenceCode
where r.Context == "TestContext"
select r.Description).ToList();
我已确认查询的第一部分有效,即横幅代码存在并返回 4 个单独的值。当我作为一个整体运行查询时,我得到以下信息:
NotSupportedException 类型“System.String[]”不支持比较运算符。
我还尝试了以下方法:
var results = (from b in Banners
where b.BannerCode == "1234"
from a in b.VesselBoatAreaY.Split (',').AsEnumerable()
from r in References
where r.Context == "TestContext" &&
a.Contains(r.ReferenceCode)
select r.Description).ToList();
当我运行它时,我得到以下信息:
参数异常
参数“值”是错误的类型。应为“System.String”。实际的'System.String[]'。
任何帮助表示赞赏!
【问题讨论】:
-
您不能在 Linq 中使用 .NET 方法并期望它们在 EF 尝试创建 SQL 查询时“正常工作”。这是一组非常具体的方法,可以被翻译。见msdn.microsoft.com/en-us/library/bb738550(v=vs.110).aspx
-
嗨,我应该说 - 我没有使用 EF,我使用的是 LinqToSQL。正是出于这个原因,我避免使用 EF。
-
这同样适用于 LinqToSql 或任何其他 LINQ 提供程序。
-
是什么阻止您在 SQL 中编写此查询?
-
@mayer06 我试图避免像存储过程这样的事情——我想在 C# 中这样做
标签: c# linq linq-to-sql