c#方法链与linq查询
我在方法链中编写了一个查询:c#方法链与linq查询,c#,linq,entity-framework,method-chaining,C#,Linq,Entity Framework,Method Chaining,我在方法链中编写了一个查询: var query = finnEntities.FINN_TRANSACTION_VIEW.Where( x => x.CREDIT_ID == model.CodeId || x.DEBTOR_ID == model.CodeId && (x.TRANSACTION_DATE>= model.DateTimeFrom.Date && x.TR
var query = finnEntities.FINN_TRANSACTION_VIEW.Where(
x => x.CREDIT_ID == model.CodeId
|| x.DEBTOR_ID == model.CodeId
&& (x.TRANSACTION_DATE>= model.DateTimeFrom.Date
&& x.TRANSACTION_DATE <= model.DateTimeTo.Date)
&& x.CURRENCY_TYPE_ID == model.CurrencyId);
var query=finnEntities.FINN\u TRANSACTION\u VIEW.Where(
x=>x.CREDIT\u ID==model.CodeId
||x.u ID==model.CodeId
&&(x.TRANSACTION_DATE>=model.DateTimeFrom.DATE
&&x.TRANSACTION\u DATE=model.DateTimeFrom
&&t.TRANSACTION_DATE你的括号不同。只要比较一下你写条件的方式,你就会注意到括号和日期的不同
x.CREDIT_ID == model.CodeId || x.DEBTOR_ID == model.CodeId && (x.TRANSACTION_DATE>= model.DateTimeFrom.Date && x.TRANSACTION_DATE <= model.DateTimeTo.Date) && x.CURRENCY_TYPE_ID == model.CurrencyId
(t.CREDIT_ID == model.CodeId || t.DEBTOR_ID == model.CodeId) && (t.TRANSACTION_DATE >= model.DateTimeFrom && t.TRANSACTION_DATE <= model.DateTimeTo) && t.CURRENCY_TYPE_ID == model.CurrencyId
您还应该注意,查询返回的是一个注释性类型,因为您编写了:
select new { f };
为了与方法链等效,需要删除新的{}
select f;
如果您查看这两个查询,您将看到
()
在第二个查询中,您在第一个查询中没有它们。这会更改where子句中的操作顺序
在第一个字段中添加了.Date
,该字段截短到当天,但不截短到第二个字段
假设第二个查询确实返回了正确的结果,您可以将第一个查询更改为:
var query = finnEntities.FINN_TRANSACTION_VIEW.Where(x =>
(x.CREDIT_ID == model.CodeId || x.DEBTOR_ID == model.CodeId)
&& x.TRANSACTION_DATE>= model.DateTimeFrom
&& x.TRANSACTION_DATE <= model.DateTimeTo
&& x.CURRENCY_TYPE_ID == model.CurrencyId);
var query=finnEntities.FINN\u TRANSACTION\u VIEW.Where(x=>
(x.CREDIT_ID==model.CodeId | | x.debutor_ID==model.CodeId)
&&x.TRANSACTION\u DATE>=model.DateTimeFrom
&&x.TRANSACTION_DATE您没有编写相同的查询-以及where子句不同,您的查询表达式使用了匿名类型的投影,这没有明显的原因。问题是什么?实际上,在这种情况下,括号不会影响逻辑。正如Habib指出的,OP以不同的方式比较日期。我无法回答请注意,‘a或b和c’相当于‘a或b’,而‘c’你给出了正确的答案,我忘记在日期前后加括号了。
select new { f };
select f;
var query = finnEntities.FINN_TRANSACTION_VIEW.Where(x =>
(x.CREDIT_ID == model.CodeId || x.DEBTOR_ID == model.CodeId)
&& x.TRANSACTION_DATE>= model.DateTimeFrom
&& x.TRANSACTION_DATE <= model.DateTimeTo
&& x.CURRENCY_TYPE_ID == model.CurrencyId);