我有3张桌子
在我的代码中,当我选择任何语言时,它只需要检索该语言的详细信息。但是在这里它返回所有EN& HI语言细节也。
在这里,当我选择我的语言作为EN,但我收到了返回EN和& HI语言细节
public List<BaseNews> GetAllNewsDetailsByLang(string lang)
{
List<BaseNews> prd = new List<BaseNews>();
if (lang.Trim() == "EN")
{
prd = (from c in context.BaseNews
join x in context.EN_NewsDetails
on c.Nid equals x.enId
where c.IsActive == true
select c).ToList();
}
else if (lang.Trim() == "HI")
{
prd = (from k in context.BaseNews
join x in context.HI_NewsDetails
on k.Nid equals x.enId
where k.IsActive == true
select k).ToList();
}
return prd;
}
public partial class BaseNews
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public BaseNews()
{
this.EN_NewsDetails = new HashSet<EN_NewsDetails>();
this.HI_NewsDetails = new HashSet<HI_NewsDetails>();
}
public int Nid { get; set; }
public int Category_CategoryId { get; set; }
public string ThumbImagePath { get; set; }
public string OriginalImagePath { get; set; }
public string ModifiedBy { get; set; }
public Nullable<bool> IsActive { get; set; }
}
public partial class EN_NewsDetails
{
public int NDetailsId { get; set; }
public int enId { get; set; }
public string Subject { get; set; }
public string Summary { get; set; }
public string Details { get; set; }
public virtual BaseNews BaseNews { get; set; }
}
public partial class HI_NewsDetails
{
public int NDetailsId { get; set; }
public int enId { get; set; }
public string Subject { get; set; }
public string Summary { get; set; }
public string Details { get; set; }
public virtual BaseNews BaseNews { get; set; }
}
答案 0 :(得分:0)
我会尝试这样的事情:
public List<BaseNews> GetAllNewsDetailsByLang(string lang)
{
var newsDetails = new List<BaseNews>();
if (lang.Trim() == "EN")
{
newsDetails = context.EN_NewsDetails
.Include(en_nd=>en_nd.BaseNews)
.Where(en_nd=>en_nd.BaseNews.IsActive.HasValue
&& en_nd.BaseNews.IsActive)
.Select(en_nd=>en_nd.BaseNews)
.ToList();
else if (lang.Trim() == "HI")
{
newsDetails = context.HI_NewsDetails
.Include(hi_nd=>hi_nd.BaseNews)
.Where(hi_nd=>hi_nd.BaseNews.IsActive.HasValue
&& hi_nd.BaseNews.IsActive)
.Select(hi_nd=>hi_nd.BaseNews)
.ToList();
}
return newsDetails;
}
备注强>
尽管上述代码可能会修复您的过滤问题,但我认为您应该更清楚地了解一些观点。
关于第二个项目,请尝试阅读上述方法,您将明白我的意思。它的名字是GetAllNewDetailsByLang
。没关系。跳过方法的第一行,我们返回BaseNews
个对象的列表。为了修复这个问题,我创建了一个误导。但无论方法的目的或其他代码或其他什么,以下行:
var newsDetails = new List<BaseNews>();
尚不清楚。它不是因为你不清楚你想要归还什么这一事实。说清楚,我们可以更改namigs并修复上述项目符号。
答案 1 :(得分:0)
我们没有看到您对上述结果所做的事情,但我也看到上下文没有被处理掉。因此,如果您从BaseNews访问该导航属性并且启用了延迟加载(默认情况下),EF将自动为您获取该数据。您可以通过执行
关闭特定上下文的延迟加载context.Configuration.LazyLoadingEnabled = false;