我有这种情况:
Table A
Field A Field B
d 1
d 2
d 3
Table B
Field A Field B
d 1
d 2
d 3
d 4
我希望表B中的“ 4”与表A中的“ 3”匹配。
这是我的当前代码:
short maxFieldB = DatabaseContext.TableA
.OrderByDescending(x => x.FieldB)
.Select(s => s.FieldB)
.First();
IQueryable<FieldXType> fieldX = (from tableb in DatabaseContext.TableB
join tablea in DatabaseContext.TableA on new
{
a = tablea.FieldA,
b = tablea.FieldB
}
equals new
{
a = tableb.FieldA,
b = (tableb.FieldB > maxFieldB ? maxFieldB : tableb.FieldB)
})
.ToList();
运行此命令时,出现异常“参数类型不匹配”。堆栈跟踪似乎指向我的包含三元运算符的语句。
(at System.Linq.Expressions.Expression.Condition(Expression test,
Expression ifTrue, Expression ifFalse))
我认为我所做的等同于T-SQL CASE语句。我要解决这个错误吗?如果是这样,如何使“表B”上的“ 4”与“表A”上的“ 3”匹配?与我从Lambda语法切换到中间的查询语法有什么关系?
谢谢。
答案 0 :(得分:0)
据我所知,您有两个表,并且希望在多个条件下将它们连接在一起。
错误是正确的"Argument types do not match".
以下是与代码有关的几个问题:
IQueryable<FieldXType> fieldX = (from tableb in DatabaseContext.TableB
join tablea in DatabaseContext.TableA on new Eaxmple1 //add a type name that contains defination for a and b
{
a = tablea.FieldA,
b = tablea.FieldB//This is of some type say FieldB(as defined in your Model Eaxmple1)
}
equals new Eaxmple1
{
a = tableb.FieldA,
b = (tableb.FieldB > maxFieldB ? maxFieldB : tableb.FieldB) //and this maxFieldB is of another type 'short' as you defined above.
} select tablea).ToList();
您的查询也缺少select
语句,从而解决了该问题。
以下一些快速修复可能会有所帮助:
创建一个新模型,其中包含a
和b
的定义(如果尚未创建),并确保它们的类型与表的类型相同。
例如
public class Eaxmple1
{
public field a {get;set;}
public field b {get;set;}
}
如果您可以提供表格的更多详细信息,我会更好地帮助您。