我有几个表格是无关的 - 我喜欢搜索它们并创建一个我可以在以后筛选的类型
这样的事情不起作用
var results = from dog in _dataContext.Dogs
where dog.Name.Contains(search)
from catin _dataContext.Cats
where cat.Name.Contains(search)
select new AnimalSearchResults
{
Dog = dog,
Cat = cat
};
return results;
我基本上想要创建一个“AnimalSearchResults”列表,其中包含所有狗和所有具有该名称的猫
做这样的事情最好的方法是什么?
答案 0 :(得分:6)
听起来你想要Union the two results,所以你的基本查询会是这样的:
var results = (from dog in _dataContext.Dogs
where dog.Name.Contains(search))
.Union
(from cat in _dataContext.Cats
where cat.Name.Contains(search));
答案 1 :(得分:3)
另一种解决方法是让类 Cat 和类 Dog 派生相同的基类,然后输入名称。
这是一个例子
public class Pet
{
public string Name {get; set;}
}
public class Dog : Pet {...}
public class Cat : Pet {...}
// I assume each classes have their singularity;
在DataContext对象中,创建一个GetPets()方法,如下所示:
public IEnumerable<Pet> GetPets()
{
return Cats.Cast().Union( Dogs.Cast() );
}
然后在DataContext中的Pets上使用LINQ。
var results =
(from p in _dataContext.GetPets()
where p.Name.Contains(search)
select p);
此代码可扩展性更高,特别是如果您有超过2个派生类。
{享受}