【发布时间】:2015-09-13 08:02:02
【问题描述】:
我有一个清单:
List<MyClass> lstClass1;
MyClass 有 2 个简单的字符串属性:
class MyClass
{
public string property1 { get; set; }
public string property2 { get; set; }
}
我在 DB 上有一个表 MyTable 进行查询,其中有两个字符串类型的列:
MyTable
column MainKey
column AlternativeKey
对于我的脚本,我必须选择 DB 和列表的连接,规则如下:如果 AlternativeKey 存在,如果 AlternativeKey 中的前 4 个字符等于 MyClass.property1 或 MyClass.Property2,则选择行,否则选择如果 MainKey 中的前 4 个字符等于 MyClass.property1 或 MyClass.Property2,则为行。这是我的实现:
IQueryable<MyTable> source = getMyTable();
List<MyClass> lstClass1 = getListClass();
IQueryable<MyClass> qMyClassList = lstClass1.AsQueryable<MyClass>();
IQueryable<MyTable> selAlternative = from alt in source
join cl1 in qMyClassList on
alt.AlternativeKey.Substring(0, 4)
equals cl1.property1
join cl2 in qMyClassList on
alt.AlternativeKey.Substring(0, 4)
equals cl2.property2
where alt.AlternativeKey != null && alt.AlternativeKey.Length >= 4
select alt;
IQueryable<MyTable> selMain = from main in source
join cl1 in qMyClassList on
main.MainKey.Substring(0, 4)
equals cl1.property1
join cl2 in qMyClassList on
main.MainKey.Substring(0, 4)
equals cl2.property2
where main.AlternativeKey == null && main.MainKey.Length >= 4
select main;
source = alt.Union(main);
在执行中,当我在结果元素上循环时,此查询引发此异常:
无法创建“MyTable+MyClass”类型的常量值。仅有的 在此上下文中支持原始类型或枚举类型。
我做错了什么?
【问题讨论】:
-
尽量不要在查询中使用相等运算符 ("==")。
标签: c# sql linq exception join