【问题标题】:Perform a LINQ query without using NotMapped properties in EF不使用 EF 中的 NotMapped 属性执行 LINQ 查询
【发布时间】:2015-07-17 15:21:05
【问题描述】:

我有以下课程:

public class Contact
{
    public int ContactID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

还有以下数据:

  • 1 / John / Doe
  • 2 / 迈克 / 泰森
  • 3 / 约翰 / 麦克恩罗
  • 4 / Stef / Doe

现在我需要让用户像这样搜索联系人:

  • John Doe > 获取名字为 John 和姓氏为 Doe 的所有联系人
  • John > 获取所有名字为John的联系人
  • Doe > 获取所有姓氏为Doe的联系人
  • ...

我尝试将NotMapped 元素添加到我的班级并对此(全)名称执行搜索,但LINQ 查询不适用于NotMapped 元素。

[NotMapped]
public string Name {
    get {
        return FirstName + " " + LastName;
    }
}

var someone = "John Doe";
requests.Where(s => s.Contact.Name.Contains(someone));

LINQ to Entities 不支持指定的类型成员“名称”。仅支持初始化程序、实体成员和实体导航属性。

有什么想法吗?

谢谢。

【问题讨论】:

  • 不是在代码中计算值,而是在数据库中使用计算列呢? stackoverflow.com/questions/6944904/… 有一些关于这方面的信息,如果你通读所有内容的话。那时您也许可以查询计算列(从不累,所以我不确定 100%)

标签: c# linq entity-framework


【解决方案1】:

我认为你不需要创建一个未映射的属性来实现你所需要的。你可以试试这个:

var someone = "John Doe";
var contacts=context.Contacts.Where(c => String.Concat(c.FirstName, " ", p.LastName).Contains(someone));

EF 支持String.Concact 方法。

【讨论】:

  • 太棒了。谢谢。
猜你喜欢
  • 2021-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-07
相关资源
最近更新 更多