过滤LINQ中的投影属性字段到实体查询

时间:2014-03-27 17:27:56

标签: c# linq linq-to-entities

以下 LINQ to Entities 查询,执行子查询并将其结果投影到MyViewModel

我希望在ProjectedModel的{​​{1}}属性中获取myText字符串变量的所有Text个对象。

SubModel

伪代码看起来像:

var items = (from t1 in db.MyTable
                select new MyModel
                {
                    Id = t1.MyId,
                    SomeItems = (from s1 in db.MyOtherTable
                        where s1.LinkedId == t1.Id
                        select new SubModel
                        {
                            Id = s1.Id,
                            Text = s1.Text
                        })
                }).ToList();

2 个答案:

答案 0 :(得分:1)

如果你想得到子项的 Any 所有项目都有给定文本,那么写起来很容易:

items = items.Where(item => 
    item.SomeItems.Any(subItem => subItem.Text.Contains(myText)));

如果您希望所有项匹配,请使用All。事实上,您的要求目前尚未完成,因为它们假设只有一个子项目。 (如果你知道总会有一个子项目,那么就不要将SubItems作为一个集合,将其作为单个项目,并获取查询中的第一个项目。)

答案 1 :(得分:0)

你可以这样做

更新了代码

item.Where(w => myText.Contains(w.Text));  

或者您可以使用.StartsWith().EndsWith()

参考:LIKE

我的回答已经过时,或者可能对你有所帮助,但可能会有更多帮助你的事情

var selectItedm = (from a in item   
                  where SqlMethods.Like(a.Text,"%"+myText+"%")  
                  select new {a.Id,a.Text}).ToList();  

您可以使用更多SqlMethods只包含System.Data.Linq.SqlClient;参考