Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#方法链与linq查询_C#_Linq_Entity Framework_Method Chaining - Fatal编程技术网

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);