在LINQ到实体查询中对投影属性字段进行过滤

本文关键字:字段 属性 过滤 投影 LINQ 实体 查询 | 更新日期: 2023-09-27 17:54:21

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

我希望在SubModelText属性中使用myText字符串变量获得所有ProjectedModel对象。

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();

伪代码看起来像:

string myText = "abc";
items = items where SomeItems.Text contains myText

在LINQ到实体查询中对投影属性字段进行过滤

如果您想获得所有子条目中任何包含给定文本的条目,那么很容易编写:

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

如果希望所有项匹配,则使用All。事实上,您的需求目前是不完整的,因为它们假设只有一个子项。(如果你知道总是有一个子项,那么不要让SubItems成为一个集合,让它成为一个单独的项目,并在查询中获得第一个项目。)

你可以这样做

更新代码
item.Where(w => myText.Contains(w.Text));  

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

reference: 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;参考