是否可以在MVC项目的Model中使用.Where?

时间:2018-07-21 11:50:01

标签: c# asp.net asp.net-mvc razor

我有2个表格模型,

第一张桌子:

public class tbl_mpDets
{
    [Key]
    public int mpd_Id  { get; set; }
    public int mp_Id   { get; set; }
    public int dpBrand { get; set; }
    public int tKrila  { get; set; }
    public int tPrecka { get; set; }
    public decimal? dpKol { get; set; }

    [DisplayFormat(DataFormatString = "{0:N0}", ApplyFormatInEditMode = true)]
    public decimal dpShirina { get; set; }
    public decimal dpVisina  { get; set; }
    public string dpLorR     { get; set; }

    [ForeignKey("dpBrand")]
    public virtual tbl_mehBrand tbl_mehBrand { get; set; }

    [ForeignKey("mp_Id")]
    public virtual tbl_mpMas tbl_mpMas   { get; set; }
    public virtual tbl_mehTip tbl_mehTip { get; set; }

    public string tip1 { get; set; }
    public tbl_mpDets(tbl_mehTip objtbl_mehTip) =>
        tip1 = (tbl_mehTip.sirOd <= dpShirina && tbl_mehTip.sirDo >= dpShirina) ? tbl_mehTip.tCode.ToString() : -1; // -1 is a default value
}

第二张表:

public class tbl_mehTip
{
    public tbl_mehTip() => tbl_mpDets = new HashSet<tbl_mpDets>();

    [Key]
    public int tip_Id { get; set; }
    public int sektor { get; set; }

    public int tBrand    { get; set; }
    public string tName  { get; set; }
    public string tCode  { get; set; }
    public decimal sirOd { get; set; }
    public decimal sirDo { get; set; }
    public decimal visOd { get; set; }
    public decimal visDo { get; set; }
    public decimal tCena { get; set; }

    [ForeignKey("tBrand")]
    public virtual tbl_mehBrand tbl_mehBrand { get; set; }

    [ForeignKey("tBrand")]

    public virtual ICollection<tbl_mpDets> tbl_mpDets { get; set; }
}

现在,在First Model中,我需要通过检查扩展名为.Where的参数来获取Value,然后从Second中选择正确的值。

示例:

// I need some code like this if is possible!
public string Nametip1 => tbl_mehTip.tCode.Where(tbl_mehTip.sirOd <= dpShirina && tbl_mehTip.sirDo >= dpShirina)

如果可以的话,请寻求帮助或提供其他解决方案?

3 个答案:

答案 0 :(得分:1)

这是不可能的,因为在tbl_Table2属性中使用的Nameclass而不是object。您可以通过如下所示的构造函数来做到这一点:

public class tbl_Table1 
{
    [Key]
    public int mpd_Id { get; set; }
    public int Size { get; set; }

    public string Name { get; set; }


    public tbl_Table1(tbl_Table2 objTbl_Table2) =>
        Name = (objTbl_Table2.SizeFrom <= Size && objTbl_Table2.SizeTo >= Size) ? objTbl_Table2.NameOfElement.ToString() : "-1"; // -1 is a default value
}

答案 1 :(得分:0)

您可以在控制器中包含此代码。实例化tbl_Table1tbl_Table2并分配X属性,如下所示:

tbl_Table1.X = tbl_Table2.NameOfElement.Where(tbl_Table2.SizeFrom <= Size && tbl_Table2.SizeTo >= Size)  

答案 2 :(得分:0)

首先,您必须在Where子句中使用lambda expression

tbl_Table2.NameOfElement.Where(x=> x.SizeFrom <= Size && x.SizeTo >= Size)

此外,您还必须使用context连接到数据库并从那里检索数据或使用模型工厂或类似列表的东西。

因此使用这样的东西:

var Name = context.tbl_Table2.Where(x=>x.SizeFrom <= Size && x.SizeTo >= Size).FirstOrDefault()?.Name;