1

2 つのことを検索する検索があります。アイテムと連絡先。それぞれに独自の属性を持つ独自のテーブルがあります。それぞれを互いに独立して正常に検索し、結果を 2 つのリスト ビューに返すことができます。しかし、それは醜く、ページングが問題になっているので、これら 2 つのテーブルを同様の結果に変換して、検索結果として表示できるようにする必要があります。これらの結果は互いに直接の関係はありません。

group t3 by new私を捨てています。同様の結果になるようにグループ化する必要がありますか? 結果は現在、たとえば ListView に表示されます<%#Eval("ItemName") %>

ItemContext db = new ItemContext(); //DB connection (Item,Contact)
            var q = (from t1 in db.Item
                     join t2 in db.Categories on t1.CategoryID equals t2.CategoryID
                     join t7 in db.Divisions on t1.DivisionID equals t7.DivisionID
                     from t3 in db.Contacts
                     join t4 in db.Categories on t3.CategoryID equals t4.CategoryID
                     join t5 in db.Divisions on t3.DivisionID equals t5.DivisionID
                     join t6 in db.ContactTitle on t3.ContactTitlesID equals t6.ContactTitlesID


                     where


                    (DDLInt == 1 || t3.DivisionID == DDLInt) &&

                         //Contains

                    (
                     t3.ContactName.Contains(keyword) ||
                     t3.ContactEmail.Contains(keyword) ||
                     t3.ContactOPhone.Contains(keyword) ||
                     t3.ContactID.Equals(searchID)


                     )
                     group t3 by new
                     {
                         t3.ContactID,
                         t3.ContactName,
                         t3.ContactOPhone,
                         t3.ContactCell,
                         t3.ContactEmail,
                         t3.DivisionID,
                         t3.CategoryID,
                         t4.CategoryName,
                         t5.DivisionName,
                         t6.ContactTitlesName

                     }

                        into i

                     select new
                     {
                         i.Key.ContactID,
                         i.Key.ContactName,
                         i.Key.ContactOPhone,
                         i.Key.ContactEmail,
                         i.Key.ContactCell,
                         i.Key.CategoryName,
                         i.Key.DivisionName,
                         i.Key.CategoryID,
                         i.Key.DivisionID,
                         i.Key.ContactTitlesName
                     });


            return q.ToList<dynamic>();
        }
4

1 に答える 1

1

使用Union():

var contacts = from c in db.Contacts
              select new {
                           Id = c.ContactID,
                           Name = c.ContactName,
                           Phone = c.ContactOPhone,
                           ...
                           CategoryName = c.Category.CategoryName,
                           DivisionName = c.Division.DivisionName,
                           ContactTitlesName = c.ContactTitle.ContactTitlesName
                         }
var items = from t1 in db.Item
            select new {
                         Id = t1.ItemID,
                         Name = t1.ItemName,
                         Phone = t1.??, // string.Empty?
                         ... // more properties corresponding
                             // with the ones above
                         CategoryName = t1.Category.CategoryName,
                         DivisionName = t1.Division.DivisionName,
                         ContactTitlesName = string.Empty
                       }
var all = contacts.Union(items);
于 2012-12-11T08:40:42.987 に答える