我很確定這屬於「UNION」場景下,但我真的只是尋找解決我的問題的最佳方法(即使它不是UNION )。LINQ - 合併兩個查詢並排除第一個查詢中的項目
我有一個查詢,看起來像這樣:
var query = context.AffiliateConfigurations.Where(x => x.AffiliateId == affiliateId).Select(config => new ViewModels.ConfigurationItem
{
ConfigurationId = config.AffiliateConfigurationId,
ConfigKey = config.ConfigKey,
ConfigValue = config.ConfigValue,
UpdatedDate = config.UpdatedDate,
ConfigurationType = ViewModels.ConfigurationType.Affiliate
});
我想要做的是一些結果添加到該查詢。我有另一個名爲SiteConfiguration的表,它具有EXACT相同的模式,但我只想添加那些ConfigKey在我的原始查詢中不存在的行中的行。
我有一些像目前是以下(和它的作品),但我正在尋找一個「純粹」的LINQ的方式來做到這一點:
var items = context.AffiliateConfigurations.Where(x => x.AffiliateId == affiliateId).Select(config => new ViewModels.ConfigurationItem
{
ConfigurationId = config.AffiliateConfigurationId,
ConfigKey = config.ConfigKey,
ConfigValue = config.ConfigValue,
UpdatedDate = config.UpdatedDate,
ConfigurationType = ViewModels.ConfigurationType.Affiliate
}).ToList();
var query = context.SiteConfigurations.Select(config => new ViewModels.ConfigurationItem
{
ConfigurationId = config.SiteConfigurationId,
ConfigKey = config.ConfigKey,
ConfigValue = config.ConfigValue,
UpdatedDate = config.UpdatedDate
});
foreach (var item in query)
{
if (items.All(x => x.ConfigKey != item.ConfigKey))
{
items.Add(item);
}
}
你試過用Except()嗎? http://msdn.microsoft.com/en-us/library/system.linq.enumerable.except.aspx – Hardrada