第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Linq查詢中傳遞引用兩個聯接記錄的選擇查詢

在Linq查詢中傳遞引用兩個聯接記錄的選擇查詢

C#
手掌心 2021-05-14 18:19:46
假設我有一個名為CustomerTransaction的表,我可以將選擇條件傳遞給類似void GetData1(Expression<Func<CustomerTransaction, bool>> selection){    CustomerTransaction.Where(selection).Take(2).Dump();}使用類似的代碼Expression<Func<CustomerTransaction, bool>> query = r => (r.CustomerID == 1);GetData1(query);但是,我希望能夠聯接此表中的兩個記錄并傳遞引用這兩個表的選擇條件。例如,以下將編譯(在LinqPad中),void GetData2(Expression<Func<Tuple<CustomerTransaction,CustomerTransaction>, bool>> selection){   var baseQuery = (from ct1 in CustomerTransaction         join ct2 in CustomerTransaction on ct1.MasterTransactionID equals ct2.RelatedTransactionID         select new Tuple<CustomerTransaction, CustomerTransaction> ( ct1, ct2)) ;    var query = baseQuery.Where(selection).Dump();}Expression<Func<Tuple<CustomerTransaction,CustomerTransaction>, bool>> query2 =       r => r.Item1.CustomerID != r.Item2.CustomerID;GetData2(query2);但是,它不會運行,因為SQL無法處理元組。如果我嘗試以SQL可以理解的方式編寫此代碼,那么我將無法通過選擇標準,因為我不知道選擇的類型例如void GetData3( ???  selection){    var baseQuery = (from ct1 in CustomerTransaction     join ct2 in CustomerTransaction on ct1.MasterTransactionID equals ct2.RelatedTransactionID     select new { Customer1 = ct1.CustomerID, Customer2 = ct2.CustomerID }  );    baseQuery.Where(selection).Dump();}顯然,實際查詢更為復雜,并且它們是多個選擇條件,因此,我試圖避免為每個可能的部分條件重復查詢。有沒有辦法解決?
查看完整描述

1 回答

?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

您可以創(chuàng)建一個表示您的join結果的顯式類,并Where在該類上創(chuàng)建表達式:


public class CT2 {

    public CustomerTransaction ct1;

    public CustomerTransaction ct2;

}

然后,您可以在查詢和Where表達式中使用該類:


void GetData2(Expression<Func<CT2, bool>> selection) {

    var baseQuery = from ct1 in db.CustomerTransaction

                    join ct2 in db.CustomerTransaction on ct1.MasterTransactionID equals ct2.RelatedTransactionID

                    select new CT2 { ct1 = ct1, ct2 = ct2 };


    var query = baseQuery.Where(selection).Dump();

}


Expression<Func<CT2, bool>> query2 =

       r => r.ct1.CustomerID != r.ct2.CustomerID;


GetData2(query2);


查看完整回答
反對 回復 2021-05-23
  • 1 回答
  • 0 關注
  • 150 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號