linq查询具有不同属性的多个表
Posted
技术标签:
【中文标题】linq查询具有不同属性的多个表【英文标题】:Linq query multiple tables with different attributes 【发布时间】:2012-12-11 03:45:11 【问题描述】:我有一个搜索要寻找两件事。项目和联系人。他们每个人都有自己的桌子,拥有自己独特的属性。我能够成功地相互独立地搜索每个并将结果返回到两个列表视图。但它是否丑陋并且分页已成为一个问题,所以我必须将这两个表转换为可以显示为搜索结果的类似结果。这些结果彼此之间没有直接关系。
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>();
【问题讨论】:
【参考方案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);
【讨论】:
非常感谢!那工作得很好。我现在需要更改其他内容。我使用 QueryString 从我的结果中链接。当我链接到详细信息页面时,有没有办法可以按类型(项目、联系人)识别它们?例如NavigateUrl='<%#Eval("ID", "~/LoggedIn/ContactDetails.aspx?ContactID=0") %>' />
向匿名类型添加一个字段(例如 Type = "Contact" 或 "Item")。以上是关于linq查询具有不同属性的多个表的主要内容,如果未能解决你的问题,请参考以下文章
具有多个 where 子句的 Linq to Datatable
优化多个 LINQ to Entity Framework 查询